我可以在docker容器中获取ip地址吗?

时间:2014-12-27 18:55:51

标签: docker ip-address

如何在此容器中获取容器ip地址?

'docker inspect $ hostname ...'不合适,因为我没有将/var/run/docker.sock主机文件共享到容器中。

10 个答案:

答案 0 :(得分:65)

我可以用

找到IP地址
hostname -i

当然,如果有多个界面,这可能不完全准确。

修改

注意:根据 hostname 手册页,hostname -i使用DNS解析IP地址,其中hostname -I显示除loopback之外的所有地址,不依赖于DNS ,推荐。

在我的所有Docker容器中,-i-I都会返回相同的结果(但在我的桌面上却不是这样)。

答案 1 :(得分:26)

由于IP地址位于/ etc / hosts的第一行,您可以在容器中执行awk命令,该命令打印/ etc / hosts

第一行的第一个单词

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

答案 2 :(得分:4)

为什么不能像以下那样简单:

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

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

答案 3 :(得分:2)

通常,您可以使用linux程序ifconfig来获取IP地址和其他网络详细信息。您的容器可能没有它,在这种情况下,您需要通过apt-getyum或您的发行版包管理器安装它。获取IP地址的基本管道是

ifconfig eth0 | grep "inet addr:" | cut -d : -f 2 | cut -d " " -f 1

答案 4 :(得分:1)

我找到了解决问题的方法:

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

它的打印类似于:' 172.17.0.135'

答案 5 :(得分:0)

您还可以在/ etc / hosts中查找以容器ID结尾的行并打印第一个字段:

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

我使用awk,但在dedian中使用标准awk:jessie不支持像{12,}这样的正则表达式量词。

答案 6 :(得分:0)

如果您更喜欢使用ip而非ifconfig,则可以在Linux上执行以下操作:

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

这只是所有的IP地址和接口,仅搜索以inet开头的那些,并仅返回第3列。

作为一个很好的副作用,这也包括子网掩码! (例如172.17.0.2/16

如果您不想要子网掩码,可以使用:

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

注意:这会显示容器中的所有 IP。您可以使用awksed删除127.0.0.1/16和其他不需要的IP。 :)

答案 7 :(得分:0)

如果具有“主机名”命令,这可能在某些容器上有效。

docker ps 以获取(容器ID)

docker exec -it (容器ID)主机名-i

答案 8 :(得分:0)

def x(t, k):
    c = len(k)
    l = len(t)
    o = ""
    for i in range(0, l):
        # ??

答案 9 :(得分:0)

较旧的答案非常有帮助。

这对我有用;它将导出命令附加到容器内主 (.bashrc) 目录中的 ~/ 文件

# Add this line to Dockerfile
RUN echo 'export CONTAINER_IP="$(hostname -i)"' >> ~/.bashrc

现在您可以访问容器内 CONTAINER_IP 环境变量的计算值。