Docker for Windows:使用相同的端口号在本地旋转多个docker容器

时间:2016-06-27 01:16:35

标签: windows docker docker-machine docker-for-windows docker-desktop

我正在使用 Docker Desktop for Windows (使用 Hyper-V ,而不是 Docker Toolkit for Windows )。我想要实现的是使用相同的端口集来旋转3个以上的docker容器。

创建第一个docker容器后,我有http://docker:8091(或http://10.0.75.2:8091)可用,这很好。现在,我想要做的是启动另一个具有相同端口号的容器。所以,像http://docker2:8091http://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 Machine在Docker for Windows上的意图无论如何都不能让我这样做,它只是用于管理云中的VM)。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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