Docker PHP 与 Xdebug 3 env XDEBUG_MODE 不工作
Docker PHP with Xdebug 3 env XDEBUG_MODE doesn't work
我正在尝试在 PHP 容器中配置 Xdebug 3
,并根据文档 https://xdebug.org/docs/all_settings#mode 将 XDEBUG_MODE
环境变量设置为 off
但是 xdebug_info()
表示 mode=develop
。如何解决?
Docker 文件:
FROM php:7.4.11-fpm
…
ENV XDEBUG_MODE=off
ENV XDEBUG_CONFIG=""
RUN pecl install xdebug \
&& docker-php-ext-enable xdebug \
...
docker-compose.yml:
services:
php:
build:
dockerfile: ${PWD}/.devcontainer/Dockerfile
image: php-fpm
environment:
XDEBUG_MODE: ${XDEBUG_MODE} // off
XDEBUG_CONFIG: ${XDEBUG_CONFIG}
x调试信息:
php -r 'xdebug_info();'
Version => 3.0.0
Support Xdebug on Patreon, GitHub, or as a business: https://xdebug.org/support
Feature => Enabled/Disabled
Development Aids => ✘ disabled
Coverage => ✘ disabled
GC Stats => ✘ disabled
Profiler => ✘ disabled
Step Debugger => ✘ disabled
Tracing => ✘ disabled
PHP
Build Configuration
Version => 7.4.11
Debug Build => no
Thread Safety => disabled
Settings
Configuration File (php.ini) Path => /usr/local/etc/php
Loaded Configuration File => /usr/local/etc/php/php.ini
Scan this dir for additional .ini files => /usr/local/etc/php/conf.d
Additional .ini files parsed => /usr/local/etc/php/conf.d/docker-php-ext-amqp.ini,
/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini,
Directive => Local Value => Master Value
xdebug.mode => develop => develop
更新:
我的情况:我使用VSCode 来调试我的应用程序,因此只有在Xdebug 侦听处于活动状态时我才需要打开Xdebug 模块。更好的方法是使用 env XDEBUG_CONFIG 和 XDEBUG_MODE,因为它不需要更改 ini 文件。
它确实有效。我的意思是:实际行为/最终结果。
尽管它显示 xdebug.mode => develop
实际功能全部关闭:
Feature => Enabled/Disabled
Development Aids => ✘ disabled
Coverage => ✘ disabled
GC Stats => ✘ disabled
Profiler => ✘ disabled
Step Debugger => ✘ disabled
Tracing => ✘ disabled
我已经在 Windows 10 上进行了本地测试 .. 我也看到了同样的结果:
php.ini 有
xdebug.mode = debug
没有 XDEBUG_MODE
override cmd 显示调试器已按预期启用:
Feature => Enabled/Disabled
Development Aids => ✘ disabled
Coverage => ✘ disabled
GC Stats => ✘ disabled
Profiler => ✘ disabled
Step Debugger => ✔ enabled
Tracing => ✘ disabled
...
xdebug.mode => debug => debug
使用 XDEBUG_MODE
覆盖:
C:\Users\Andriy
$ SET XDEBUG_MODE=off
C:\Users\Andriy
$ php -r "xdebug_info();"
...
Feature => Enabled/Disabled
Development Aids => ✘ disabled
Coverage => ✘ disabled
GC Stats => ✘ disabled
Profiler => ✘ disabled
Step Debugger => ✘ disabled
Tracing => ✘ disabled
...
xdebug.mode => debug => debug
如果我运行这个命令(传递额外的Xdebug配置参数告诉立即开始调试):
php -dxdebug.start_with_request=yes -r "xdebug_info();"
然后在没有覆盖的情况下,它将尝试建立调试连接,而在有覆盖的情况下,它将不会尝试这样做。这确认覆盖有效(至少在我的环境中)。
docker-compose 定义中定义的 XDEBUG_MODE 环境正在覆盖 Dockerfile 中的默认值。
只有当您使用 --env-file
(> docker-compose --env-file=xdebug.env ...
)
调用 docker-compose
时,您的方法才有效
我想你想要的是继承一个你正在定义内联或已经存在于 terminal/shell 环境中的 XDEBUG_MODE。在那种情况下,您只需要声明没有任何值的 var
services:
php:
environment:
XDEBUG_MODE
并调用 docker-compose
类似于 > XDEBUG_MODE=Off docker-compose
我正在尝试在 PHP 容器中配置 Xdebug 3
,并根据文档 https://xdebug.org/docs/all_settings#mode 将 XDEBUG_MODE
环境变量设置为 off
但是 xdebug_info()
表示 mode=develop
。如何解决?
Docker 文件:
FROM php:7.4.11-fpm
…
ENV XDEBUG_MODE=off
ENV XDEBUG_CONFIG=""
RUN pecl install xdebug \
&& docker-php-ext-enable xdebug \
...
docker-compose.yml:
services:
php:
build:
dockerfile: ${PWD}/.devcontainer/Dockerfile
image: php-fpm
environment:
XDEBUG_MODE: ${XDEBUG_MODE} // off
XDEBUG_CONFIG: ${XDEBUG_CONFIG}
x调试信息:
php -r 'xdebug_info();'
Version => 3.0.0
Support Xdebug on Patreon, GitHub, or as a business: https://xdebug.org/support
Feature => Enabled/Disabled
Development Aids => ✘ disabled
Coverage => ✘ disabled
GC Stats => ✘ disabled
Profiler => ✘ disabled
Step Debugger => ✘ disabled
Tracing => ✘ disabled
PHP
Build Configuration
Version => 7.4.11
Debug Build => no
Thread Safety => disabled
Settings
Configuration File (php.ini) Path => /usr/local/etc/php
Loaded Configuration File => /usr/local/etc/php/php.ini
Scan this dir for additional .ini files => /usr/local/etc/php/conf.d
Additional .ini files parsed => /usr/local/etc/php/conf.d/docker-php-ext-amqp.ini,
/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini,
Directive => Local Value => Master Value
xdebug.mode => develop => develop
更新:
我的情况:我使用VSCode 来调试我的应用程序,因此只有在Xdebug 侦听处于活动状态时我才需要打开Xdebug 模块。更好的方法是使用 env XDEBUG_CONFIG 和 XDEBUG_MODE,因为它不需要更改 ini 文件。
它确实有效。我的意思是:实际行为/最终结果。
尽管它显示 xdebug.mode => develop
实际功能全部关闭:
Feature => Enabled/Disabled
Development Aids => ✘ disabled
Coverage => ✘ disabled
GC Stats => ✘ disabled
Profiler => ✘ disabled
Step Debugger => ✘ disabled
Tracing => ✘ disabled
我已经在 Windows 10 上进行了本地测试 .. 我也看到了同样的结果:
php.ini 有
xdebug.mode = debug
没有 XDEBUG_MODE
override cmd 显示调试器已按预期启用:
Feature => Enabled/Disabled
Development Aids => ✘ disabled
Coverage => ✘ disabled
GC Stats => ✘ disabled
Profiler => ✘ disabled
Step Debugger => ✔ enabled
Tracing => ✘ disabled
...
xdebug.mode => debug => debug
使用 XDEBUG_MODE
覆盖:
C:\Users\Andriy
$ SET XDEBUG_MODE=off
C:\Users\Andriy
$ php -r "xdebug_info();"
...
Feature => Enabled/Disabled
Development Aids => ✘ disabled
Coverage => ✘ disabled
GC Stats => ✘ disabled
Profiler => ✘ disabled
Step Debugger => ✘ disabled
Tracing => ✘ disabled
...
xdebug.mode => debug => debug
如果我运行这个命令(传递额外的Xdebug配置参数告诉立即开始调试):
php -dxdebug.start_with_request=yes -r "xdebug_info();"
然后在没有覆盖的情况下,它将尝试建立调试连接,而在有覆盖的情况下,它将不会尝试这样做。这确认覆盖有效(至少在我的环境中)。
docker-compose 定义中定义的 XDEBUG_MODE 环境正在覆盖 Dockerfile 中的默认值。
只有当您使用 --env-file
(> docker-compose --env-file=xdebug.env ...
)
docker-compose
时,您的方法才有效
我想你想要的是继承一个你正在定义内联或已经存在于 terminal/shell 环境中的 XDEBUG_MODE。在那种情况下,您只需要声明没有任何值的 var
services:
php:
environment:
XDEBUG_MODE
并调用 docker-compose
类似于 > XDEBUG_MODE=Off docker-compose