Networking Docker-端口阻止侦听
我正在尝试在基于docker的设置上设置xdebug集成Networking Docker-端口阻止侦听,networking,docker,phpstorm,xdebug,Networking,Docker,Phpstorm,Xdebug,我正在尝试在基于docker的设置上设置xdebug集成 我正在使用Docker for Mac 1.12.0-rc2-beta17和“本机”Docker机器 我有一个安装了xdebug的容器,它公开了端口9000并将其映射到端口9000: $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
- 我正在使用Docker for Mac 1.12.0-rc2-beta17和“本机”Docker机器
- 我有一个安装了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以进行调试连接时,我收到一个错误“无法侦听:端口9000正忙”
我必须明确指出我是网络新手。首先检查您的容器日志以进行调试:
docker logs 6950c2a2b05d
或
为类尾部行为添加-f
标志:
docker logs -f app_1
首先检查要调试的容器日志:
docker logs 6950c2a2b05d
或
为类尾部行为添加-f
标志:
docker logs -f app_1
它取决于您希望通过Xdebug进行连接的方式
xdebug.remote\u connect\u back=1
表示PHP将等待一个带有GET参数的HTTP请求xdebug\u SESSION\u START=
。然后,服务器中的PHP将尝试通过PHPStorm所在的端口9000连接回来。别打电话给我们,我们会打电话给你的情况
现在你和docker的情况很简单,你的集装箱负责港口9000。因此PHP将得到一个环回,PHPStorm无法使用端口9000,因为docker容器已经在使用它
因此,跳过将端口9000分配给docker,这将解决此情况 这取决于您希望通过Xdebug进行连接的方式
xdebug.remote\u connect\u back=1
表示PHP将等待一个带有GET参数的HTTP请求xdebug\u SESSION\u START=
。然后,服务器中的PHP将尝试通过PHPStorm所在的端口9000连接回来。别打电话给我们,我们会打电话给你的情况
现在你和docker的情况很简单,你的集装箱负责港口9000。因此PHP将得到一个环回,PHPStorm无法使用端口9000,因为docker容器已经在使用它
因此,跳过将端口9000分配给docker,这将解决此情况 我发现了两件事:
- 没有必要在带有xdebug的容器上公开端口9000(这对我来说似乎有点违反直觉,因为当时我并不完全理解IDE是如何连接到xdebug的)
- 我能够使用中描述的解决方法使用xdebug
我发现了两件事:
- 没有必要在带有xdebug的容器上公开端口9000(这对我来说似乎有点违反直觉,因为当时我并不完全理解IDE是如何连接到xdebug的)
- 我能够使用中描述的解决方法使用xdebug
必须使用
--expose
选项绑定9000端口
如果您使用的是docker compose示例docker-compose.yml文件如下:
version: '2'
services:
your_app:
ports:
- "80:80"
expose:
- "9000"
image: "your-image:tag"
必须使用--expose
选项绑定9000端口
如果您使用的是docker compose示例docker-compose.yml文件如下:
version: '2'
services:
your_app:
ports:
- "80:80"
expose:
- "9000"
image: "your-image:tag"
尝试执行sudo lsof-nP-iTCP-sTCP:LISTEN
命令,查看哪个应用程序正在该TCP 9000端口上侦听。端口(或套接字,它是由ip地址:端口组成的端点)不是可抢占资源:最多只有一个进程可以访问它。启动的容器使用端口9000
,因此PhpStorm不能同时使用它。你能展示一下docker run命令吗?@LazyOne:下面是输出:命令PID用户FD类型设备大小/非节点名称com.dock 36299 repptilia 11u IPv4 0x7faf9785f44d7ab 0t0 TCP*:9000(听)
@Auzias:我正在通过docker compose编排容器。有没有办法在不阻塞端口的情况下启动容器?首先--我自己不是Docker用户。。所以不能给你准确的答案。我只能看到一些程序/服务已经在本地侦听TCP 9000端口。从我在其他xdebug+docker问题中看到的情况来看——不应该是这样——本地端口应该是免费的。不知道如何将其配置为不这样做。。但这里有一个想法——尝试使用9001(或任何其他自由端口)——看看它是否工作得更好(xdebug和PhpStorm都可以轻松配置为使用另一个端口)。尝试执行sudo lsof-nP-iTCP-sTCP:LISTEN
命令,看看哪个应用程序正在该TCP 9000端口上侦听。一个端口(或套接字,它是由ip_地址:port组成的端点)不是可抢占资源:最多只有一个进程可以访问它。启动的容器使用端口9000
,因此PhpStorm不能同时使用它。请显示docker run
命令好吗?@LazyOne:以下是输出:命令PID用户FD类型设备大小/OFF NODE NAME com.docke 36299 repptilia 11u IPv4 0x7faf9785f44d7ab 0t0 TCP*:9000(侦听)
@Auzias:我正在通过docker compose编排容器。有没有办法在不阻塞端口的情况下启动容器?首先——我自己不是docker用户。因此无法给出准确答案。我只能看到一些程序/服务已经在本地监听TCP 9000端口。从我在其他xdebug+dock中看到的情况来看er这里的问题——不应该是这样的——本地端口应该是免费的。我不知道如何配置它以避免这样做。但是这里有一个想法——尝试使用9001(或任何其他免费端口)——看看它是否工作得更好(xdebug和PhpStorm都可以很容易地配置为使用另一个端口)。你有什么建议吗?我删除该行docker-compose.yml中的“9000:9000”?如果我这样做,我就无法在PHPStorm中捕获断点。如果我只是使用“9000”“,docker分配一个随机端口,如果我出于同样的原因更改PHPStorm配置,我将无法连接到该端口。PHPStorm不连接到docker,相反,PHP将连接回您的主机,您的PHPStorm正在运行,并在PHP连接的端口9000上侦听。是的……我花了一点时间