12

我有

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

我有许多在 Docker 映像中运行的 JBoss 实例(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,但我可能手动创建了它(不确定......现在已经尝试了很长时间)。但这在将容器的端口绑定到此设备时很有帮助,例如 docker run ... -p 10.0.75.1:8080:8080。然后我可以使用 10.0.75.1:8080 调用该服务,但这对第二个容器没有帮助。

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

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

4

2 回答 2

10

在 docker for windows 上,您可以使用地址 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

于 2017-05-03T14:22:23.723 回答
1

你不能。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/

如果您需要使用容器中托管的应用程序,请从您的本地主机公开应用程序的端口,并-p选择docker run

docker run -p 8080:8080 image_name

然后连接到localhost:8080该服务

于 2016-12-30T18:45:40.470 回答