Docker – 端口阻止收听
我正在尝试在基于docker的设置上设置xdebug集成。
- 我正在使用Docker for Mac 1.12.0-rc2-beta17与“本机”泊坞窗机器
-
我有一个安装了xdebug的容器,公开了9000端口并将其映射到9000端口:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6950c2a2b05d app "/usr/bin/supervisord" 9 minutes ago Up 9 minutes 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:9000->9000/tcp, 0.0.0.0:2222->22/tcp app_1
-
当我尝试使用PhpStorm侦听端口9000进行debugging连接时,出现错误“无法侦听:端口9000正忙”。
我必须确定我是networking新手。
这取决于你想通过Xdebug连接
xdebug.remote_connect_back=1
表示PHP将等待一个带有GET参数XDEBUG_SESSION_START=<IDE_key>
的HTTP请求。 然后,服务器中的PHP将尝试通过您的PHPStorm列出的端口9000连接。 经典不要打电话给我们,我们会打电话给你的情况。
现在你的情况与docker说简单,你的容器负责端口9000.所以PHP将得到一个回环,PHPStorm不能使用端口9000,因为它已经被你的docker集装箱使用。
所以跳过端口9000的分配到docker,这将解决这种情况。
首先检查您的容器日志进行debugging:
docker logs 6950c2a2b05d
要么
docker logs app_1
为类tail
行为添加-f
标志:
docker logs -f app_1
我发现了两件事:
- 没有必要使用xdebug在容器上公开端口9000(这对我来说似乎是非常直观的,因为我不完全明白我的IDE如何连接到xdebug)。
- 我能够使用xdebug使用https://forums.docker.com/t/ip-address-for-xdebug/10460/4中所述的解决方法。