当我运行命令运行Windows docker容器并将端口暴露给主机时,我可以ping容器并连接到它。问题是我现在想要从通过虚拟交换机连接到主机以太网网络的Hyper-V VM执行此操作。
Hyper-V中没有桥接适配器选项,仅在Virtualbox中。 Windows docker容器网络驱动程序默认情况下也是NAT,而不是Linux容器中的桥接器。
我已经尝试覆盖网络驱动程序连接到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
当前版本的Hyper-V创建一个默认交换机,连接到默认网络,客户虚拟机使用该默认交换机通过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/
在您的情况下,您应该能够在http://192.168.<your gateway>:15672/
上从Hyper-V来宾VM访问docker容器的RabbitMQ Web UI。
编辑:您可能还需要删除特定的IP地址绑定,以便端口映射到所有接口,包括Hyper-V默认网络。
注意:Hyper-V还支持内部和共享(桥接)网络,也可以以类似的方式使用。早期版本的Hyper-V没有默认NAT(但您可以使用Windows Internet连接共享来创建NAT)。