Php Xdebug无需任何理由就自动捕获连接

Php Xdebug无需任何理由就自动捕获连接,php,docker,xdebug,Php,Docker,Xdebug,应用程序在docker容器上运行:nginx和php fpm。Xdebug配置了PhpStorm。该应用程序工作正常,直到Xdebug突然开始捕获所有连接,即使我没有启用调试。我甚至没有改变任何配置-它只是开始这样做(有点神奇,但当然应该有一些东西) 为什么是Xdebug:如果我从Dockerfile中删除Xdebug设置,一切都会开始工作。此外,请求挂起就像我调试它们时发生的那样,即它们在等待几分钟后随着504网关超时错误而消失 PhpStorm不会启动调试会话,因此它以静默方式进行。关闭Ph

应用程序在docker容器上运行:nginx和php fpm。Xdebug配置了PhpStorm。该应用程序工作正常,直到Xdebug突然开始捕获所有连接,即使我没有启用调试。我甚至没有改变任何配置-它只是开始这样做(有点神奇,但当然应该有一些东西)

为什么是Xdebug:如果我从Dockerfile中删除Xdebug设置,一切都会开始工作。此外,请求挂起就像我调试它们时发生的那样,即它们在等待几分钟后随着
504网关超时
错误而消失

PhpStorm不会启动调试会话,因此它以静默方式进行。关闭PhpStorm没有帮助。重新启动容器、docker守护进程本身甚至操作系统都没有帮助。在不同的浏览器中没有任何变化

php fpm/Dockerfile

来自php:7.3.18-fpm-alpine
运行apk add--无缓存$PHPIZE_DEPS\
&&pecl安装xdebug-2.9.8\
&&docker php ext启用xdebug
#…还有更多行,但即使我删除它们,问题仍然存在
#当我注释这一行并执行“docker compose build&&docker compose down&&docker compose up-d”时,
#应用程序恢复了生机。
复制xdebug.ini/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
php fpm/xdebug.ini

zend_extension=xdebug.so
xdebug.remote\u enable=1
xdebug.remote\u connect\u back=关闭
xdebug.remote\u host=docker.for.mac.localhost
xdebug.remote_port=10000
xdebug.idekey=PHPSTORM
xdebug.remote\u autostart=true
xdebug.var\u显示\u最大\u深度=16
xdebug.var\u display\u max\u children=256
xdebug.var\u display\u max\u data=-1
docker compose.yml

版本:“3.7”
服务:
nginx:
图片:nginx:stable
卷数:
-./docker/nginx/vhost.conf.template:/tmp/vhost.conf.template
-./docker/nginx/logs:/logs
-./:/app
取决于:
-php fpm
php fpm:
构建:docker/php fpm
环境:
PHP\u IDE\u CONFIG:serverName=app.local
卷数:
-./:/app
nginx/vhost.conf

服务器{
字符集utf-8;
客户最大尺寸为250M;
听80;
服务器名称app.local;
root/app/public;
index.php;
access_log/logs/nginx.app.access.log;
error\u log/logs/nginx.app.error.log;
地点/{
try_files$uri$uri//index.php$is_args$args;
}
位置~\.php${
try_files$uri=404;
fastcgi_pass fpm:9000;
包括/etc/nginx/fastcgi_参数;
fastcgi_index.php;
fastcgi_参数脚本_文件名$request_文件名;
}
位置~*“/\”{
否认一切;
返回404;
}
}
这是MacOS 10.14.6上的Docker Desktop 2.5.0

可能是什么

为什么是Xdebug:如果我从Dockerfile中删除Xdebug设置,一切都会开始工作。此外,请求挂起就像我调试它们时发生的那样,即它们在等待几分钟后随着
504网关超时
错误而消失

启用Xdebug日志以确认调试会话已建立,并检查那里正在进行的通信(如果有)。这应该会给你一些关于那可能是什么的线索

无论如何,看起来您在TCP 10000端口上已经有了一些服务(在您的主机操作系统(Mac)上),可以阻止PhpStorm在那里侦听(IDE可以检测Windows和Linux上已经占用的端口,但在Mac上不能)

使用类似于sudolsof-nP-iTCP-sTCP的方法:倾听并检查该服务可能是什么。然后关闭该应用程序或使用其他端口(用于该应用程序或Xdebug通信)

为什么是Xdebug:如果我从Dockerfile中删除Xdebug设置,一切都会开始工作。此外,请求挂起就像我调试它们时发生的那样,即它们在等待几分钟后随着
504网关超时
错误而消失

启用Xdebug日志以确认调试会话已建立,并检查那里正在进行的通信(如果有)。这应该会给你一些关于那可能是什么的线索

无论如何,看起来您在TCP 10000端口上已经有了一些服务(在您的主机操作系统(Mac)上),可以阻止PhpStorm在那里侦听(IDE可以检测Windows和Linux上已经占用的端口,但在Mac上不能)


使用类似于sudolsof-nP-iTCP-sTCP的方法:倾听并检查该服务可能是什么。然后关闭该应用程序或使用另一个端口(用于该应用程序或用于您的Xdebug通信)。

1)启用Xdebug日志并查看它将在那里显示什么。2) 最好显示所有Xdebug设置(实际设置)。显示
phpinfo()。在Linux/Mac上,CLI和web服务器通常有单独的php.ini。可能您已将连接延迟设置为很长的值(默认值为0.2秒)。3) 那台TCP 10000上有什么服务?在Docker内部以及(最重要的)主机操作系统(Mac)上。使用
lsof
进行此操作,例如
sudo lsof-nP-iTCP-sTCP:LISTEN
3)您确实需要
xdebug.remote\u autostart=true
选项吗?它告诉Xdebug尝试调试每个脚本。您是否尝试过使用Xdebug浏览器扩展/bookmarklet来控制要调试的页面?另外,xdebug.remote_host=docker.for.mac.localhost
您可以使用
host.docker.internal
来代替它(在Windows上也可以使用..在Linux上也有一些小改动)..@LazyOne感谢您的帮助,您对TCP 10000的猜测就是答案。事实证明,我在该端口上有另一个应用程序,它捕获了Xdebug之前的所有请求。感谢这些设置的提示,我将考虑更改My1)启用XDebug日志并查看它在那里会说什么。2) 最好展示你所有的Xdebu