0

我正在使用Docker Desktop for Windows(使用Hyper-V,而不是Docker Toolkit for Windows)。我想要完成的是启动 3 个以上的 docker 容器,并提供相同的端口集。

创建第一个 docker 容器后,我有http://docker:8091(或http://10.0.75.2:8091)可用,这很好。现在,我想做的是启动另一个具有相同端口号的容器。所以,类似http://docker2:8091, 或http://10.0.75.3:8091)。然后在 docker3 或*.4:8091.

(请注意,启动三个将暴露端口重新分配给其他随机端口的容器是小菜一碟,但我想保留端口号)。

我尝试通过 Hyper-V 管理器向 MobyLinuxVM 添加网络适配器,但这似乎破坏了 Docker,我必须重新安装才能让它再次工作。

我尝试使用 docker-machine ( docker-machine create -d hyperv --hyperv-virtual-switdch DockerNAT AnotherBox) 启动另一个 Hyper-V 实例,但这只是锁定了大约一半并且不起作用。(根据我在论坛上阅读的内容,Docker for Windows 上的 docker-machine 的意图并不是让我能够做到这一点,它只是为了管理云中的虚拟机)。

那么......有什么办法可以完成我想要做的事情吗?

4

2 回答 2

1

是的,有一种方法,通过使用反向代理。您可以在容器内使用 Nginx 或 HAProxy,或者更简单,您可以使用自动重新配置自身的 Nginx 映像来反向代理您的容器: https ://hub.docker.com/r/jwilder/nginx-proxy/ 。

于 2016-06-27T19:30:43.573 回答
1

为了发布端口,docker 使用二进制 docker-proxy 转发到容器中,实际上像:

docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8091 -container-ip 172.17.0.2 -container-port 8091

显然,它绑定到本示例中的所有接口,但我认为可以绑定到特定接口。

假设您的主机上有 3 个接口和适当的 DNS 记录,则可以这样做:

docker-proxy -proto tcp -host-ip 10.0.75.2 -host-port 8091 -container-ip 172.17.0.2 -container-port 8091
docker-proxy -proto tcp -host-ip 10.0.75.3 -host-port 8091 -container-ip 172.17.0.3 -container-port 8091
docker-proxy -proto tcp -host-ip 10.0.75.4 -host-port 8091 -container-ip 172.17.0.4 -container-port 8091
于 2016-11-18T08:40:57.487 回答