如何从Windows主机获取位于桥接网络内的Docker容器的IP地址?

时间:2018-07-16 10:59:06

标签: mysql docker

已使用以下方法在docker中创建了桥网络:

docker network create blognetwork

并且已经在网络中使用以下内容创建了一个容器:

docker run --name=blogdb --network=blognetwork -p 3306:3306 -e --bind-address=0.0.0.0 -e=MYSQL_ROOT_PASSWORD=mypassword -detach mysql

如何从Windows主机访问“博客网络”中新容器的IP地址?

如何单独获取X.X.X.X格式的IP地址?我知道我可以使用以下命令获取包含此数据的大型json输出:

docker network inspect blognetwork

4 个答案:

答案 0 :(得分:5)

您可以使用docker inspect和适当的格式直接获取IP:

docker inspect containerId --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'

Docker documentation.

中的更多信息

答案 1 :(得分:2)

您可以使用docker inspect直接获取IP地址。 Docker inspect提供了有关由Docker控制的构造的详细信息。

现代Docker客户端语法为:

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

旧Docker客户端语法为:

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

这些命令将返回Docker容器的IP地址。

如果您使用的是Windows,请在大括号周围使用双引号“而不是单引号”。

有关更多信息,Docker inspect documentation

答案 2 :(得分:1)

这是用于获取容器信息以及容器IP的命令。

docker inspect 'ContainerID'

答案 3 :(得分:0)

自从你跑了

docker run -p 3306:3306 ...

您应该使用主机的DNS名称或IP地址通过端口3306访问该服务。

在非常特殊的情况下,假设您未使用Docker Machine或Docker Toolbox,则在运行docker run的计算机上出现shell提示符或浏览器URL条目时仅在这种情况下,您可以使用localhost:3306访问该容器。除非您完全清楚这是什么意思,否则切勿将localhost用于Docker周围的任何其他用途。 (如果您曾经写过一个使用“ ...的...的本地主机”的问题,那么本地主机就不是您想要的。)

如果您试图从另一个容器到达这个容器,因为您已经运行了

docker run --name=blogdb --network=blognetwork ...

您可以使用名称blogdb作为主机名,并且Docker提供了内部DNS服务,可以将其解析为可以到达容器的内容。

您永远不需要Docker内部IP地址,并且永远不要运行docker inspect来尝试找到它。它的两个最大问题是,它在脱离主机时无法访问,并且在删除和重新创建容器后会更改。