如何从 Docker 容器内部访问主机环回设备上的反向 SSH 隧道的端口?

如何从 Docker 容器内部访问主机环回设备上的反向 SSH 隧道的端口?

我在 Docker 容器中安装了 Xdebug PHP 扩展,该容器运行我的开发和测试环境的 PHP-FPM。

调试客户端(PhpStorm 内置的客户端)监听我本地 Windows 机器上的 9000 端口。

当我在 PHP-FPM 容器内安装 SSH 服务器并使用 PuTTY 创建从 PHP-FPM 容器内的本地端口指向 Windows 机器上的端口 9000 的反向 SSH 隧道时,Xdebug 可以很好地连接到 PhpStorm。

但出于显而易见的原因,我不希望 SSH 服务器在我的 PHP-FPM 容器内运行。但是当我创建从主机(而不是容器内)指向我的 Windows 计算机的反向 SSH 隧道时,我无法访问主机上的端口。

为了测试这一点,我在容器内安装了 telnet。当我在容器外运行 telnet 时,可以连接到端口,但在 PHP-FPM 容器内,无论我尝试连接到 127.0.0.1 还是 172.17.0.1(我的主机的 Docker IP),端口都不可用。

学到了这是有道理的,因为如果容器以桥接模式运行,则无法从容器内部访问环回设备。当我使用“--net=host”运行容器时,可以通过 127.0.0.1 进行连接,但出于安全原因,我需要容器以桥接模式运行。

这个答案建议在我的 OpenSSH 设置中设置“GatewayPorts yes”,但我不想向公众开放我的反向端口。我如何从 Docker 容器内访问主机环回设备上的反向 SSH 隧道的端口(并且只能访问此端口 - 而不是整个环回设备)?

相关内容