如何获取正在运行的docker container

时间:2017-04-29 07:24:59

标签: docker containers docker-for-mac

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

9 个答案:

答案 0 :(得分:62)

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

docker inspect <containerNameOrId>

过滤可能更好:

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

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

修改 使用docker功能的另一种更优雅的方式,而不是&#34; bash tricking&#34;:

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

答案 1 :(得分:9)

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

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

答案 2 :(得分:7)

如果您想在容器内获取它,可以尝试

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

答案 3 :(得分:4)

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

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

答案 4 :(得分:2)

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

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

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

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

答案 5 :(得分:0)

就我而言,以下内容在Mac上有效

我无法直接在Mac上访问容器IP。我需要在端口转发中使用str2date,例如如果端口是8000,则localhost

请参见https://docs.docker.com/docker-for-mac/networking/#known-limitations-use-cases-and-workarounds

原始答案来自:https://github.com/docker/for-mac/issues/2670#issuecomment-371249949

答案 6 :(得分:0)

如果您想从正在运行的容器中查看 IP 地址,/etc/hosts 文件是一个很好的查看位置。现在,要唯一标识 hosts 文件中的条目,最好使用 -h 选项运行容器。示例命令如下:

  1. 使用 -h 集运行容器:

docker run -td -h guju <image name>

  1. 登录正在运行的容器并查看 /etc/hosts 文件。它将显示如下条目:

172.17.0.5 guju

答案 7 :(得分:-1)

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

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

答案 8 :(得分:-1)

这将列出所有容器的 IP 地址

while read ctr;do
    sudo docker inspect --format "$ctr "'{{.Name}}{{ .NetworkSettings.IPAddress }}' $ctr
done < <(docker ps -a --filter status=running --format '{{.ID}}')