如何从Hyper-v VM连接到Windows docker容器的公开端口?

时间:2018-10-02 18:00:52

标签: docker hyper-v portforwarding

当我运行命令以运行Windows docker容器并将端口公开给主机时,我可以ping容器并连接到它。问题是我现在想从通过虚拟交换机连接到主机以太网的Hyper-V VM上执行此操作。

Hyper-V中没有桥接适配器的选项,仅在Virtualbox中。 Windows docker容器网络驱动程序默认情况下也是NAT,与Linux容器中的网桥相反。

我已经尝试了Overlay网络驱动程序来连接到Docker Swarm,但是Windows容器也不支持。我也尝试过使用指定的网络目标,子网掩码和网关将静态路由添加到Windows路由表中,但是也没有运气。

我没有尝试过的唯一选择是端口映射/转发,但是我不是一个网络专家,我可以在网上找到的有关Hyper-V端口映射的文档涉及使用虚拟交换机进行NAT配置。我不确定下一步该怎么做。

docker run --rm --name rabbitmqtest -p 15672:15672 -p 5672:5672 --ip 192.168.130.4
5 -t imgtest containerNetwork 

1 个答案:

答案 0 :(得分:0)

当前版本的Hyper-V将创建一个默认交换机,该默认交换机连接到默认网络,来宾VM使用该默认交换机通过NAT连接到主机网络。

您可以通过ipconfig命令从来宾VM中获取网络详细信息。例如,我目前有一部机器:

IPv4 Address. . . . . . . . . . . : 192.168.131.236
Subnet Mask . . . . . . . . . . . : 255.255.255.240
Default Gateway . . . . . . . . . : 192.168.131.225

默认网关基本上是主机,因此您应该能够直接在该IP地址上访问映射的端口。

例如,在我的机器上,我也在容器中运行Elastic Stack,并且Kibana端口映射到32771。

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                                                                NAMES
9fa6fe19a911        sebp/elk:latest     "/usr/local/bin/star…"   16 minutes ago      Up 16 minutes       0.0.0.0:32772->5044/tcp, 0.0.0.0:32771->5601/tcp, 0.0.0.0:32770->9200/tcp, 0.0.0.0:32769->9300/tcp   elk

要从来宾VM访问Kibana,我只需浏览至http://192.168.131.225:32771/

对于您而言,您应该能够从Hyper-V来宾VM的http://192.168.<your gateway>:15672/访问docker容器的RabbitMQ Web UI

编辑:您可能还需要删除特定的IP地址绑定,以便将端口映射到包括Hyper-V默认网络在内的所有接口上。

注意:Hyper-V还支持内部和共享(桥接)网络,也可以类似的方式使用。早期版本的Hyper-V没有默认的NAT(但是您可以使用Windows Internet连接共享来创建NAT)。