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 容器)。
我想启用 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 容器)。