Can I get ip address inside my docker container?

2019-03-11 17:43发布

How to get container ip address inside this container?

'docker inspect $hostname ...' not suitable, because I don't share /var/run/docker.sock host file to container.

7条回答
Melony?
2楼-- · 2019-03-11 18:10

As the IP address is in the first line of /etc/hosts, you can do in a container the awk command that prints the first word of the first line of /etc/hosts

gg@805689be5f47:/$ awk 'END{print $1}' /etc/hosts 172.17.0.14

查看更多
混吃等死
3楼-- · 2019-03-11 18:13

I can find the IP address with

hostname -i

Of course, that may not be completely accurate if there is more than one interface.

Edit

Note: According to the hostname man page, hostname -i uses DNS to resolve the ip address, where hostname -I displays all the addresses except loopback, does not depend on DNS, and is recommended.

In all my Docker containers, -i and -I return the same results (but this is not the case on my desktop).

查看更多
走好不送
4楼-- · 2019-03-11 18:17

You could also look for a line in /etc/hosts that ends with a container id and print the first field:

sed -n 's/^\([0-9\.]*\)[[:blank:]]*[0-9a-f]\{12,\}$/\1/p' /etc/hosts

I'd use awk, but standard awk in dedian:jessie doesn't support regex quantifiers like {12,}.

查看更多
干净又极端
5楼-- · 2019-03-11 18:21

I found solution to my problem:

/sbin/ip route|awk '/scope/ { print $9 }'

It's print something like: '172.17.0.135'

查看更多
我命由我不由天
6楼-- · 2019-03-11 18:28

Why not something as simple as:

grep "`hostname`" /etc/hosts|awk '{print $1}'

or

grep "$HOSTNAME" /etc/hosts|awk '{print $1}'
查看更多
Root(大扎)
7楼-- · 2019-03-11 18:31

If you prefer to use ip rather than ifconfig, on Linux you can do:

ip addr | grep inet | tr -s ' ' | cut -d ' ' -f 3

This simply gets all of the IP addresses and interfaces, searches only for those starting with inet and returns only the 3rd column.

As a nice side-effect, this includes the subnet mask, too! (e.g. 172.17.0.2/16)

If you don't want the subnet mask, you can use:

ip addr | grep inet | tr -s ' ' | cut -d ' ' -f 3 | tr -d '/'

NOTE: This shows ALL of the IPs in the container. You can use awk or sed to remove 127.0.0.1/16 and other unwanted IPs. :)

查看更多
登录 后发表回答