在Docker主机(OSX)上关闭的端口仍然在内部Docker网络中保持/报告打开。

5
在我的OSX 12.3上升级Docker到4.6.0后,当我停止PHPStorm中的xdebug监听客户端时,出现了一个奇怪的问题。似乎由于docker报告host.docker.internal打开了9003端口,而实际上它关闭了,所以随后的请求始终超时,因此应用程序始终等待xdebug客户端。
我在Web应用程序php容器和主机上安装了nmap进行测试。如果我在我的主机上运行“nmap -p 9003 localhost”,并在调试客户端上运行,则可以看到它打开,在PHPstorm中关闭后,相同的扫描显示它已关闭,但是在容器内部运行“nmap -p 9003 host.docker.internal”仍然报告它已经打开。如果我在主机上打开其他服务,似乎在docker内部网络上开始显示端口已打开,但是在关闭它们后从未报告为已关闭。
我升级到Docker 4.6.1,但问题仍然存在。
任何建议都将不胜感激。

2
我也遇到了同样的问题,使用Xdebug+VSCode时,现在为了继续工作,我必须一直让Xdebug保持监听状态。或者重新启动Docker Desktop可以解决这个问题(直到我开始另一个调试会话)。 - Viperet
1
这里也有同样的问题,主机上的调试器,监听端口似乎永远不会被释放(但实际上已经被释放)。https://dev59.com/1cTra4cB1Zd3GeqPxx_E - JazzCat
2
提供信息,降级到 Docker 4.5.0 对我解决了这个问题。链接 https://docs.docker.com/desktop/mac/release-notes/#docker-desktop-450 - Viperet
1
尝试了4.7.1版本,仍然无法正常工作。 - Andy Davies
2
Docker 票:https://github.com/docker/for-mac/issues/6247 - LazyOne
显示剩余5条评论
2个回答

3

1

更新:降级到Docker 4.5.0可以解决这个问题。

这并没有解决问题,只是在等待修复期间帮助避免重新启动 Docker。在 xdebug.ini 中进行更改:

xdebug.start_with_request=trigger
xdebug.idekey=VSCODE

这将告诉XDebug仅在HTTP请求中存在“trigger”时连接到调试器。

现在,安装Chrome扩展程序Xdebug Helper,它虽然有点老但仍然可用。打开扩展程序设置 (chrome-extension://eadndfjplgieldjbigjakmdgkmoaaaoc/options.html) 并将IDE密钥设置为“Other”“VSCODE”。

Xdebug helper settings

现在,当您想要进行调试时,在VSCode中启用调试,并使用该扩展程序在Chrome中启用调试:

Enabling debugging in Xdebug helper

完成调试后 - 在扩展程序中选择“Disable”,即使端口仍然打开,PHP也不会尝试连接到调试器。工作原理是 - 扩展程序只是在每个请求中发送cookie XDEBUG_SESSION=VSCODE,只有在存在此cookie时,XDebug才会连接到调试器。

P.S. 您可以将VSCODE替换为您的IDE使用的IDE密钥,或者只是任何字符串。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接