我正在尝试在运行 Docker 容器 (Linux) 的 Windows 10 之间建立连接,该容器运行 QEMU 来托管 QNX OS。这张图片应该更清楚: 结构
我想强调一下我目前所取得的成就:
- 从主机,我可以 ping docker 容器内的 IP:10.0.75.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 主机上不起作用。
不幸的是,我到目前为止尝试过的方法都没有成功:
- 为 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
- 使用 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。