如何获取正在运行的Docker容器的IP地址


Answers:


115

如果您不想将端口从主机映射到容器,则可以直接访问容器的docker range ip。默认情况下,仅从主机访问该范围。您可以执行以下操作来检查您的容器网络数据:

docker inspect <containerNameOrId>

可能更好地进行过滤:

docker inspect <containerNameOrId> | grep '"IPAddress"' | head -n 1

通常,默认docker ip range是172.17.0.0/16。如果一切正常,并且没有指定任何特殊的网络选项,则主机应该是172.17.0.1,第一个容器应该是172.17.0.2

编辑 使用docker功能而不是“ bash欺骗”的另一种更优雅的方法:

docker inspect -f "{{ .NetworkSettings.IPAddress }}" <containerNameOrId>

7
您在谈论内部IP,它与当前的问题无关。您的回答只会使读者感到困惑。由于IP是运行Docker的机器的IP。这只是localhost:)
David Gatti

你错了。OP没有指定关于微服务必须从外部访问的任何内容。他只说“通过浏览器测试节点微服务”,而这可以通过我http://172.17.0.2:anyPort从主机使用我提出的方法来完成。当然,如果要使用主机上的localhost访问它,则必须映射端口。会看到OP想要的。
OscarAkaElvis

3
您是说可以从主机访问Container内的内部IP?那是物理上不可能的,那是完全不同的网络。不仅我只是检查了,是的,我无法访问Docker容器的172.17.0.7,如果我使用网络扫描仪扫描主机,那么我应该能够看到所有Docker竞争者。再次。我知道它不起作用,我测试了您说的话(您永远不知道),并且它不起作用。因此,也许您的解释缺少关键部分?
David Gatti

可以从主机访问容器。自己尝试...我会给您一些提示。1.下载运行容器:docker run --name struts --rm -i tomcat2.获取容器的ip(如果只有一个):docker inspect struts | grep '"IPAddress"' | head -n 13.在主机的浏览器中将其打开http://x.x.x.x:8080。您可以看到Apache Tomcat默认页面。
OscarAkaElvis's

1
如果没有使用-p映射端口,我将无法访问容器中的Web应用
bilal.haider

22

使用--format选项仅获取IP地址,而不是整个容器信息:

sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' <CONTAINER ID>

4
在Windows主机中,请使用双引号而不是单引号。例如sudo docker inspect --format“ {{.NetworkSettings.IPAddress}}” <容器ID或名称>参考:链接
Vineet Sajwan

1
有关容器的信息的新格式在这里
Igor

18

对于现代docker引擎,请使用以下命令:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id

对于较旧的引擎,请使用:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id

如前所述,并通过@sanyash在注释中链接到原始OP区域。
杰西·奇斯霍尔姆

模板解析错误:模板:: 1:命令中意外的未关闭操作
gmlvsv


5

您可以使用标志启动容器 -P。这会将随机端口“分配”到图像的裸露端口。

随着docker port <container id>您可以看到随机选择的端口。然后可以通过访问localhost:port



-2

您无法从该主机外部访问Docker的IP。如果您的浏览器在另一台计算机上,则最好通过传递-p 8080:8080运行命令来将主机端口映射到容器端口。

通过后,-p您可以将主机端口映射到容器端口,并且将代理设置为将所述主机端口的所有trafix转发到指定的容器端口。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.