docker - 如何从 hyper-v 虚拟机连接到 windows docker 容器的公开端口?

标签 docker hyper-v portforwarding

当我运行命令来运行 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 创建了一个连接到默认网络的默认交换机, guest VM 使用该交换机通过 NAT 连接到主机网络。

您可以通过 ipconfig 从 guest 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

要从 guest VM 访问 Kibana,我只需浏览到 http://192.168.131.225:32771/
在您的情况下,您应该能够从 Hyper-V guest VM 访问 docker 容器的 RabbitMQ Web UI,地址为 http://192.168.<your gateway>:15672/

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

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

关于docker - 如何从 hyper-v 虚拟机连接到 windows docker 容器的公开端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52613893/

相关文章:

database - docker-compose:将变量传递给 tomcat 上下文

docker - 通过 Ajax 使用 docker 执行沙箱命令

Linux KVM .img 转换为 Hyper-V .vhd

linux - Django 服务器从 Mac 到 Linux 的本地端口转发

tomcat - 端口转发(通过 2 个路由器)到树莓派 tomcat

网络主机中的 Docker 绑定(bind)端口

docker 网络创建错误 "numerical result out of range"

android - 安装 Windows 10 周年更新后无法启动 Android 模拟器

linux - lspci 未显示 HyperV 网络适配器

couchdb - Vagrant 端口转发不起作用