如何在此容器中获取容器ip地址?
'docker inspect $ hostname ...'不合适,因为我没有将/var/run/docker.sock主机文件共享到容器中。
答案 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-get
或yum
或您的发行版包管理器安装它。获取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。您可以使用awk
或sed
删除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
环境变量的计算值。