【问题标题】:Docker on Windows: how to connect to container from host using container IP?Windows 上的 Docker:如何使用容器 IP 从主机连接到容器?
【发布时间】:2017-05-14 23:30:27
【问题描述】:

我有

  • Windows 10
  • Docker for Windows V. 1.12.5 Rev. 9503,不再依赖 boot2docker 或 VirtualBox。

我有许多 JBoss 实例在 Docker 映像中运行(172.18.0.2 是一个数据库):

  • 实例1:名称:jboss-eap,IP:172.18.0.3
  • 实例2:名称:jboss-eap-arquillian,IP:172.18.0.4

应该同时运行。每个 JBoss 实例都导出例如它的 8787、8080 和 8443 端口。

我还创建了一个桥接网络: docker network create --driver bridge --subnet 172.18.0.0/24 bridged_network

目前,我已经设置了本地端口转发,以便主机可以使用前缀访问各种服务(例如,访问实例 1 的端口 8080 时,主机使用 localhost:28080 进行连接)。但这很容易出错。

现在,我想使用容器的 IP 从主机访问这些端口,例如调用 172.18.0.4:8080(下一步:使用主机名:jboss-eap-arquillian:8080)。 虽然这在容器之间顺利运行,但我无法将其设置为从主机连接。

有 Windows 网络接口(类型:DockerNAT),IP 为 10.0.75.1,但有可能是我手动创建的(不确定......现在已经尝试了很长时间)。但这在将容器的端口绑定到此设备时很有帮助,例如码头运行...-p 10.0.75.1:8080:8080。然后我可以使用 10.0.75.1:8080 调用服务,但这对第二个容器没有帮助。

我也尝试过使用 Docker 的主机网络设备,但是 一种。似乎只适用于一台机器 湾。我无法静态设置运行静态配置的 JUnit 测试所需的 IP。 注意:我不能依赖网络 DHCP 在启动时分配 IP,因为我经常更改我的网络(因此 DHCP),导致再次出现不固定的 IP。

所以基本上我正在寻找一种方法来设置网络/容器,以便我可以使用容器 IP(例如 172.18.0.3 为实例 1) 从使用 172.18.0.3:8080 的主机。

【问题讨论】:

  • 你知道,这不是 docker 方式并且破坏了可移植性。你似乎想要一个虚拟机,为什么不直接使用虚拟机呢?

标签: windows docker jboss docker-networking


【解决方案1】:

在 Windows 的 docker 上,您可以使用地址 10.0.75.1:8080,但您需要配置防火墙,更好的方法是使用地址 10.0.75.2:8080,

对于这两个地址,您必须在运行容器时发布您的端口

docker run -p 8080:8080 image_name

更多信息https://github.com/docker/for-win/issues/334#issuecomment-297030101

【讨论】:

  • 这对我有帮助,但要详细说明一下:-p 标志将端口从主机映射到容器。在示例中,它们是相同的端口。第一个是 host 上的端口,第二个是 container 上的端口。例如,要在端口 8083 上运行 Redis 容器,您可以像这样调用:docker run -p 8083:6379 redis。你说的是“在端口 8083 上进入我的‘外部’主机的任何东西都应该转发到端口 6379 上的这个容器”(这是 Redis 的标准端口)。
【解决方案2】:

你不能。 docker不是虚拟机,无法通过IP访问docker主机。

在这里看到我同样的问题:https://forums.docker.com/t/access-dockerized-services-via-the-containers-ip-address/21151

我对它的工作原理的认识,在这里:https://derickbailey.com/2016/08/29/so-youre-saying-docker-isnt-a-virtual-machine/

如果您需要使用容器中托管的应用程序,请从您的 localhost 使用 docker run-p 选项公开应用程序的端口

docker run -p 8080:8080 image_name

然后为该服务连接到localhost:8080

【讨论】:

  • 如果他使用 Linux 容器,docker 正在虚拟机中运行。它在 Hyper-V 中运行类似微型的 linux 发行版。
  • 我确实能够访问 docker 容器 ips:172.17.0.x,在谷歌云虚拟机上测试
  • 但是在windows上无法访问172.17.0.x,好奇怪
猜你喜欢
  • 1970-01-01
  • 2017-04-06
  • 2019-06-15
  • 1970-01-01
  • 2016-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-25
相关资源
最近更新 更多