当我运行命令以运行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
答案 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)。