Docker :如何(反向)转发端口以允许访问主机的 localhost:PORT?

Docker : how to (reverse) forward port to allow access to the host's localhost:PORT?

我想启用 docker VM 以连接到 windows 上 docker 主机的本地主机上的端口。

docker 提议端口转发,但恕我直言,只是将 docker 的 VM 端口暴露给 运行 正在运行 VM 的主机。

也可以在启动时将主机名映射到 IP 地址 docker,但同样,这只能在 VM 上看到。 所以以下选项都没有帮助:

docker run \ 
    --add-host host:127.0.0.1 \
    -p 6000:6000 \
    OTHER_ARGUMENTS

我目前的目的是将 Windows 主机上的 XServer 端口 运行ning 公开给虚拟机。我目前的解决方案是找到一个 Windows 主机 IP,但是当网络发生变化时,该 IP 不再有效并且 XServer 显然没有监听新 IP。
当计算机休眠并在唤醒时处于新网络时会发生这种情况。

相比之下,ssh 提供 -L-R 选项,允许以任何一种方式转发 IP/port。
一种可能的解决方案是以分离模式启动容器,ssh 并设置端口转发,然后在另一个 docker 运行.
中完成所有其他工作 另一种可能的解决方案是setup a NAT server(我没试过)。
在 VM 中使用 host.docker.internal 可能是一种解决方案 - 我开始测试它以查看它是否会随着时间的推移而保持不变。它确实适用于初始连接(我将 DISPLAY 设置为 host.docker.internal:0.0)。 (host-gateway 可能需要更多调查)。
运行 无隔离(选项 --net host)。未测试。

所以我的问题是,有什么方法可以让 docker 虚拟机访问 Windows HOST 的本地主机地址 (127.0.X.X) .

一个不太普遍的问题是:如何在 Windows 主机和 docker 运行 上设置 DISPLAY/Xserver 以便它们始终工作,即使在更改网络后也是如此.

请注意,我的主机 OS 是 Windows 10(这在 *nix 上可能更容易做到)。

根据建议的可能性,至少在 windows 上,最好的解决方案是将 DISPLAY 设置为 host.docker.internal:0.0

docker可以直接设置这个选项来启动:

   docker -e DISPLAY=host.docker.internal:0.0 <OTHERARGUMENTS>

我通过启动 netcat 会话验证了 `` 连接到本地主机。

在 windows 主机上(使用 cygwin),我开始:

nc -l 127.0.0.1 3000

我可以使用以下方法从 VM 连接到它:

telnet host.docker.internal 3000

使用

启动netcat守护进程时
nc -l 169.254.11.167 3000

从 VM 远程登录到本地主机没有成功,需要 telnet 169.254.11.167 3000

因此,host.docker.internal(在我测试的虚拟机中是 168.168.65.2)对应 Windows 主机上的本地主机(而不是 WSL 实例的本地主机 运行 docker 容器)。