我想让一个 Docker 虚拟机连接到在 Windows 上运行的 Docker 的本地主机上的端口。
Docker 提供了端口转发功能,但我认为只能将 Docker 虚拟机的端口暴露给运行虚拟机的主机。
在启动 Docker 时,也可以将主机名映射到 IP 地址,但同样只能在虚拟机中看到。
因此,以下选项都没有帮助:
我的当前目的是将运行在Windows主机上的XServer端口暴露给虚拟机。我的当前解决方案是找到Windows主机IP,但当网络发生变化时,该IP不再有效,并且XServer显然没有在新IP上进行监听。
这种情况发生在计算机休眠并在唤醒时连接到新网络时。
相比之下,
可能的解决方案是以分离模式启动容器,在其中进行
另一种可能的解决方案是 设置 NAT 服务器(我没有尝试过)。
在 VM 中使用
不隔离地运行 (选项
Docker 提供了端口转发功能,但我认为只能将 Docker 虚拟机的端口暴露给运行虚拟机的主机。
在启动 Docker 时,也可以将主机名映射到 IP 地址,但同样只能在虚拟机中看到。
因此,以下选项都没有帮助:
docker run \
--add-host host:127.0.0.1 \
-p 6000:6000 \
OTHER_ARGUMENTS
我的当前目的是将运行在Windows主机上的XServer端口暴露给虚拟机。我的当前解决方案是找到Windows主机IP,但当网络发生变化时,该IP不再有效,并且XServer显然没有在新IP上进行监听。
这种情况发生在计算机休眠并在唤醒时连接到新网络时。
相比之下,
ssh
提供了 -L
和 -R
选项,允许双向转发 IP/端口。可能的解决方案是以分离模式启动容器,在其中进行
ssh
并设置端口转发,并在另一个 docker
运行中完成所有其他工作。另一种可能的解决方案是 设置 NAT 服务器(我没有尝试过)。
在 VM 中使用
host.docker.internal
可能是一个解决方案 - 我开始测试它是否经久耐用。对于初始连接它确实有效(我将 DISPLAY 设置为 host.docker.internal:0.0
)。(host-gateway
可能需要更多的调查)。不隔离地运行 (选项
--net host
)。未经测试。
所以我的问题是,有哪些方法可以让 docker VM 访问 Windows HOST 的本地主机地址(127.0.X.X)上的端口。
一个不太一般的问题是:如何在 Windows 主机和 docker 运行中设置 DISPLAY/Xserver,以便它们始终正常工作,即使在更改网络后也是如此。
请注意,我的主机操作系统是Windows 10(在*nix上可能更容易实现)。