如何获取运行docker容器的IP地址

use*_*875 73 containers docker docker-for-mac

我正在使用Docker for Mac,我在docker容器中运行基于nodejs的微服务.我想通过浏览器测试节点微服务.如何获取运行docker容器的IP地址?

Osc*_*vis 85

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

docker inspect <containerNameOrId>
Run Code Online (Sandbox Code Playgroud)

过滤可能更好:

docker inspect <containerNameOrId> | grep '"IPAddress"' | head -n 1
Run Code Online (Sandbox Code Playgroud)

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

编辑 使用docker功能而不是"bash tricking"的另一种更优雅的方式:

docker inspect -f "{{ .NetworkSettings.IPAddress }}" <containerNameOrId>
Run Code Online (Sandbox Code Playgroud)

  • 你在谈论内部IP,它与手头的问题无关.你的回答让读者感到困惑.由于IP是运行Docker的机器的IP.这只是`localhost` :) (7认同)
  • 您是说可以从主机访问Container内的内部IP?那是物理上不可能的,那是完全不同的网络。不仅我检查了,是的,我无法访问我的Docker容器的172.17.0.7,如果我使用网络扫描仪扫描主机,那么我应该能够看到所有Docker竞争者。再次。我知道它不起作用,我测试了您说的话(您永远不知道),并且它不起作用。因此,也许您的解释缺少关键部分? (3认同)
  • 我无法在不使用 -p 映射端口的情况下访问容器中的 Web 应用程序 (2认同)

Nil*_*tel 14

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

sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' <CONTAINER ID>
Run Code Online (Sandbox Code Playgroud)

  • 在Windows主机中,请使用双引号而不是单引号。例如sudo docker inspect --format“ {{.NetworkSettings.IPAddress}}” &lt;容器ID或名称&gt;参考:[link](https://github.com/docker/toolbox/issues/433) (2认同)

小智 10

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

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
Run Code Online (Sandbox Code Playgroud)

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

docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id
Run Code Online (Sandbox Code Playgroud)


Ily*_*iev 8

如果你想在容器内获得它,你可以尝试

ip a | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | grep 172.17
Run Code Online (Sandbox Code Playgroud)


小智 5

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

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