我正在使用Docker for Mac,运行一个基于Node.js的微服务在Docker容器中。我想通过浏览器测试Node微服务。如何获取正在运行的Docker容器的IP地址?
我正在使用Docker for Mac,运行一个基于Node.js的微服务在Docker容器中。我想通过浏览器测试Node微服务。如何获取正在运行的Docker容器的IP地址?
如果您不想将主机端口映射到容器中,则可以直接访问容器的Docker 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 tricking”:
docker inspect -f "{{ .NetworkSettings.IPAddress }}" <containerNameOrId>
编辑2 对于现代的Docker引擎,现在是这样的(感谢评论者!):
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <containerNameOrId>
localhost
:) - David Gattihttp://172.17.0.2:anyPort
完成。当然,如果你想使用主机上的 localhost 访问它,你必须映射端口。我们将看看 OP 想要什么。 - OscarAkaElvis对于现代的Docker引擎,请使用以下命令:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
对于旧版引擎,请使用:
docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id
如果您想在容器内正确获取它,可以尝试
ip a | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | grep 172.17
-P
启动容器。这将为您的镜像暴露端口“分配”一个随机端口。docker port <container id>
命令,您可以查看随机选择的端口。然后可以通过localhost:port
访问该端口。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。/etc/hosts
文件是一个很好的查看位置。为了在hosts
文件中唯一地标识条目,最好使用-h
选项运行容器。以下是示例命令:
-h
的命令运行容器:docker run -td -h guju <image name>
/etc/hosts
文件。它将显示以下条目:172.17.0.5 guju
这将列出所有容器的IP地址
while read ctr;do
sudo docker inspect --format "$ctr "'{{.Name}}{{ .NetworkSettings.IPAddress }}' $ctr
done < <(docker ps -a --filter status=running --format '{{.ID}}')
-p 8080:8080
运行命令来将主机端口映射到容器端口。-p
,您可以将主机端口映射到容器端口,并设置代理以将所有流量转发到指定的容器端口。