我正在尝试从 docker 容器连接到主机的端口,但它不想为特定端口工作(在我的例子中
9003
)。
在主机上,我检查端口是否打开:
lsof -nP -iTCP -sTCP:LISTEN
我看到了目标端口 (
9003
):
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
phpstorm 32838 mypersonalusername 17u IPv4 0x0000000000000000 0t0 TCP 127.0.0.1:63342 (LISTEN)
phpstorm 32838 mypersonalusername 266u IPv4 0x0000000000000000 0t0 TCP *:9003 (LISTEN)
当我在 docker 容器内运行时,下一个命令是:
nc -vz host.docker.internal 9003
我看到该端口不可用,但是当我尝试到达另一个端口时:
nc -vz host.docker.internal 63342
并且有效:
host.docker.internal (192.168.65.254:63342) open
我尝试使用
docker.for.mac.host.internal
主机,我检查了macOS防火墙设置,甚至禁用了防火墙,但没有帮助。我看到端口定义的差异(127.0.0.1:63342
与 *:9003
),但我看不到如何在第二个端口上指定主机。即使如此,对于其他一些应用程序来说,这并不重要,我可以使用 *
主机连接到端口(不是所有东西,但仍然如此)。
如果有影响,我正在尝试建立从我的容器到 PhpStorm 的 Xdebug 连接。
我确信只有 PHPStorm 监听该端口,我尝试设置一个不同的端口 - 最终结果相同。我不会从 Docker 公开端口。我知道,区别就在这里。问题是 Netcat 没有返回任何输出,退出代码是
1
但它不会立即返回,而是在等待某些内容。
您能否告知为什么会发生这种情况以及如何解决该问题?
在我的特定情况下,VPN 协议阻止了连接。我不知道如何、为什么以及如何调试它,但最后,我改变了协议,一切都开始变得有魅力。
我得到的唯一提示是从另一个应用程序启用端口侦听器,例如:
nc -l 900
你看,我这里也无法连接。