118

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

4

9 回答 9

144

如果您不想将主机的端口映射到容器,您可以直接访问容器的 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 功能而不是“bash 欺骗”的另一种更优雅的方式:

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

EDIT2 对于现代 docker 引擎,现在是这种方式(感谢评论者!):

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <containerNameOrId>
于 2017-04-29T10:06:45.407 回答
26

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

sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' <CONTAINER ID>
于 2018-04-12T11:21:06.350 回答
24

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

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

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

docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id
于 2019-04-29T06:06:16.007 回答
10

如果您想直接在容器中获取它,您可以尝试

ip a | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | grep 172.17
于 2017-11-10T16:07:08.290 回答
6

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

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

于 2017-04-29T18:08:20.353 回答
2

就我而言,以下在 Mac 上工作:

我无法直接在 Mac 上访问容器 IP。我需要使用localhost端口转发,例如如果端口是 8000,那么http://localhost:8000

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

最初的答案来自:https ://github.com/docker/for-mac/issues/2670#issuecomment-371249949

于 2019-03-20T23:12:38.080 回答
0

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

  1. 使用 set 运行容器-h

docker run -td -h guju <image name>

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

172.17.0.5 guju

于 2021-07-17T02:24:00.243 回答
-1

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

while read ctr;do
    sudo docker inspect --format "$ctr "'{{.Name}}{{ .NetworkSettings.IPAddress }}' $ctr
done < <(docker ps -a --filter status=running --format '{{.ID}}')
于 2021-02-26T09:57:03.423 回答
-4

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

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

于 2019-04-06T00:23:41.423 回答