Xdebug 无缘无故地静静地捕捉连接
Xdebug silently catches connections with no reason
应用程序在 docker 容器上运行:nginx 和 php-fpm。 Xdebug 使用 PhpStorm 配置。该应用程序正常运行,直到 Xdebug 突然开始捕获所有连接,即使我没有启用调试也是如此。我什至没有更改任何配置 - 它只是开始执行此操作(有点神奇,但当然应该有一些东西)。
为什么是 Xdebug:如果我从 Docker 文件中删除 Xdebug 设置,一切都会开始工作。此外,请求挂起就像我调试它们时发生的那样,即它们在等待几分钟后因 504 Gateway Time-out
错误而死。
PhpStorm 不会启动调试会话,因此会静默进行。关闭 PhpStorm 没有帮助。重新启动容器、docker 守护程序本身甚至 OS 也无济于事。在不同的浏览器中没有任何变化。
php-fpm/Dockerfile
:
FROM php:7.3.18-fpm-alpine
RUN apk add --no-cache $PHPIZE_DEPS \
&& pecl install xdebug-2.9.8 \
&& docker-php-ext-enable xdebug
#...there are more lines, but even when I remove them, the issue remains
#When I comment this line and do `docker-compose build && docker-compose down && docker-compose up -d`,
# the app returns to life.
COPY xdebug.ini /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
php-fpm/xdebug.ini
:
zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_connect_back=off
xdebug.remote_host=docker.for.mac.localhost
xdebug.remote_port=10000
xdebug.idekey=PHPSTORM
xdebug.remote_autostart=true
xdebug.var_display_max_depth = 16
xdebug.var_display_max_children = 256
xdebug.var_display_max_data = -1
docker-compose.yml
:
version: '3.7'
services:
nginx:
image: nginx:stable
volumes:
- ./docker/nginx/vhost.conf.template:/tmp/vhost.conf.template
- ./docker/nginx/logs:/logs
- ./:/app
depends_on:
- php-fpm
php-fpm:
build: docker/php-fpm
environment:
PHP_IDE_CONFIG: serverName=app.local
volumes:
- ./:/app
nginx/vhost.conf
:
server {
charset utf-8;
client_max_body_size 250M;
listen 80;
server_name app.local;
root /app/public;
index index.php;
access_log /logs/nginx.app.access.log;
error_log /logs/nginx.app.error.log;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass fpm:9000;
include /etc/nginx/fastcgi_params;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
location ~* "/\." {
deny all;
return 404;
}
}
Mac 上的 Docker 桌面版 2.5.0OS 10.14.6.
它会是什么?
Why it's Xdebug: if I remove the Xdebug settings from Dockerfile, everything starts working. Also, requests hang like it happens when I debug them, i.e. they die after a few minutes waiting with the 504 Gateway Time-out
error.
启用 Xdebug 日志以确认调试会话已建立并检查那里正在进行什么通信(如果有)。这应该会为您提供一些线索。
无论如何,看起来您已经在 TCP 10000 端口上(在您的主机 OS (Mac) 上)阻止 PhpStorm 在那里侦听(IDE 可以在 Windows 和 Linux 上检测已占用的端口,但在 Mac 上检测不到 - WI-29443).
使用 sudo lsof -nP -iTCP -sTCP:LISTEN
之类的东西并检查该服务可能是什么。然后关闭该应用程序或使用另一个端口(用于该应用程序或用于您的 Xdebug 通信)。
应用程序在 docker 容器上运行:nginx 和 php-fpm。 Xdebug 使用 PhpStorm 配置。该应用程序正常运行,直到 Xdebug 突然开始捕获所有连接,即使我没有启用调试也是如此。我什至没有更改任何配置 - 它只是开始执行此操作(有点神奇,但当然应该有一些东西)。
为什么是 Xdebug:如果我从 Docker 文件中删除 Xdebug 设置,一切都会开始工作。此外,请求挂起就像我调试它们时发生的那样,即它们在等待几分钟后因 504 Gateway Time-out
错误而死。
PhpStorm 不会启动调试会话,因此会静默进行。关闭 PhpStorm 没有帮助。重新启动容器、docker 守护程序本身甚至 OS 也无济于事。在不同的浏览器中没有任何变化。
php-fpm/Dockerfile
:
FROM php:7.3.18-fpm-alpine
RUN apk add --no-cache $PHPIZE_DEPS \
&& pecl install xdebug-2.9.8 \
&& docker-php-ext-enable xdebug
#...there are more lines, but even when I remove them, the issue remains
#When I comment this line and do `docker-compose build && docker-compose down && docker-compose up -d`,
# the app returns to life.
COPY xdebug.ini /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
php-fpm/xdebug.ini
:
zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_connect_back=off
xdebug.remote_host=docker.for.mac.localhost
xdebug.remote_port=10000
xdebug.idekey=PHPSTORM
xdebug.remote_autostart=true
xdebug.var_display_max_depth = 16
xdebug.var_display_max_children = 256
xdebug.var_display_max_data = -1
docker-compose.yml
:
version: '3.7'
services:
nginx:
image: nginx:stable
volumes:
- ./docker/nginx/vhost.conf.template:/tmp/vhost.conf.template
- ./docker/nginx/logs:/logs
- ./:/app
depends_on:
- php-fpm
php-fpm:
build: docker/php-fpm
environment:
PHP_IDE_CONFIG: serverName=app.local
volumes:
- ./:/app
nginx/vhost.conf
:
server {
charset utf-8;
client_max_body_size 250M;
listen 80;
server_name app.local;
root /app/public;
index index.php;
access_log /logs/nginx.app.access.log;
error_log /logs/nginx.app.error.log;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass fpm:9000;
include /etc/nginx/fastcgi_params;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
location ~* "/\." {
deny all;
return 404;
}
}
Mac 上的 Docker 桌面版 2.5.0OS 10.14.6.
它会是什么?
Why it's Xdebug: if I remove the Xdebug settings from Dockerfile, everything starts working. Also, requests hang like it happens when I debug them, i.e. they die after a few minutes waiting with the
504 Gateway Time-out
error.
启用 Xdebug 日志以确认调试会话已建立并检查那里正在进行什么通信(如果有)。这应该会为您提供一些线索。
无论如何,看起来您已经在 TCP 10000 端口上(在您的主机 OS (Mac) 上)阻止 PhpStorm 在那里侦听(IDE 可以在 Windows 和 Linux 上检测已占用的端口,但在 Mac 上检测不到 - WI-29443).
使用 sudo lsof -nP -iTCP -sTCP:LISTEN
之类的东西并检查该服务可能是什么。然后关闭该应用程序或使用另一个端口(用于该应用程序或用于您的 Xdebug 通信)。