从 Windows 主机连接到 Docker 中的 QEMU

从 Windows 主机连接到 Docker 中的 QEMU

我正在尝试在运行 Docker 容器 (Linux) 的 Windows 10 之间建立连接,该容器运行 QEMU 来托管 QNX OS。这张图片应该更清楚: 结构

我想强调一下我目前所取得的成就:

  1. 从主机,我可以 ping docker 容器内的 IP:10.0.75.2
  2. 从docker容器中,我建立了一个tap接口和一个VDE交换机,我可以ping通QNX:192.168.56.51

用于启动环境的命令:

#add new network interface
ip tuntap add mode tap dev tap0
ip addr add 192.168.56.1/24 dev tap0
ip link set dev tap0 up

#start vde switch connected to tap0
vde_switch -F -d -sock /tmp/myswitch -tap tap0

#start QEMU
qemu-system-x86_64  \
-m 1024  \
-cpu qemu64  \
-smp 2  \
-netdev vde,id=t0,sock=/tmp/myswitch  \
-device e1000,netdev=t0,mac=52:54:00:12:34:50  \
-drive file=/qnx/qnx_vm_x86_64-qemu.img  \
-D /var/log/qemu_err.log \
-serial file:/var/log/qemu_out.log  \
-display none -daemonize

运行docker容器的命令:

docker run -it --rm --network=host --cap-add=NET_ADMIN --privileged qemu_qnx

缺少的是能够在主机和 QNX 之间建立连接。例如,是否可以将连接从 Hvint0 转发到 Tap0?

附注:在 Linux 主机上,我可以使用 network=host 运行 Docker 容器,并且可以轻松地从主机访问它,但不幸的是,这在 Windows 主机上不起作用。

不幸的是,我到目前为止尝试过的方法都没有成功:

  1. 为 QNX 客户机进行端口转发:
#flush iptables rules
iptables -F
iptables -t nat -F

#Add rule
iptables -t nat -A PREROUTING -p tcp --dport 2222 -j DNAT --to-destination 192.168.56.51:22

#Save the iptables rule :
sudo iptables-save | sudo tee /etc/iptables.up.rules

  1. 使用 hostfwd 选项启动 QEMU,我可以看到端口已打开,但我无法通过 ssh 进入(怀疑这也与 QNX 网络设置有关)
-device e1000,netdev=net0
-netdev user,id=net0,hostfwd=tcp::2222-:22

如果我可以提供更多信息,请告诉我。

答案1

不幸的是,Windows(和 Mac)不支持该--network=host模式,因为阅读官方文档

主机网络驱动程序仅适用于 Linux 主机,不支持 Mac 版 Docker Desktop、Windows 版 Docker Desktop 或 Windows Server 版 Docker EE。

相关内容