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

问题描述 投票:1回答:1

当我运行命令运行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 
docker hyper-v portforwarding
1个回答
0
投票

当前版本的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)。

© www.soinside.com 2019 - 2024. All rights reserved.