Xdebug(在 Docker 容器内)忽略 XDEBUG_CONFIG 环境变量
Xdebug (inside Docker container) ignoring XDEBUG_CONFIG environment variable
我正在 运行在 Docker 上安装一个 PHP 应用程序,我想使用 XDebug 对其进行调试。
在我的 docker-compose 中,我在 phpfpm 部分添加了以下行:
environment:
XDEBUG_CONFIG: "remote_enable=1 remote_host=192.168.110.29 remote_port=9000 idekey=PHPSTORM remote_autostart=1"
PHP_IDE_CONFIG: "serverName=reports.dev"
我以正确的方式配置了 PHPStorm,侦听端口 9000 和 运行 应用程序。
应用程序运行完美,但 XDebug 似乎无法运行。
如果我在 php.ini 文件中移动配置行,调试器就会工作,除了服务器名称为空并且我无法调试(这就是为什么我尝试遵循 docker-组合配置方式)。
如果在 docker 容器内,我 运行 echo $XDEBUG_CONFIG 输出是正确的,但 XDebug 似乎没有读取那个 Env 变量。
你做了phpinfo();
吗?那应该告诉你使用的设置。
我遇到了同样的问题...我花了很长时间才弄明白。你在使用 xdebug.remote_connect_back=1
吗?如果是这样,请删除该行。
我的 nginx 代理正在转发一个 IP(这是错误的),因此 XDEBUG_CONFIG 中设置的 ip 被忽略了。
我遇到了同样的问题。我的图像是基于 nimmis/alpine-apache-php7/
. I found that the image was using supervisor
来启动进程的。 supervisor
不知道 Docker 环境变量。
告诉 supervisor
进程需要 运行 的惯例是在 /etc/sv/{process}/run
处创建一个 run
脚本。 A script like this 用于启动 Apache。我需要更改脚本,以便在启动 Apache 之前导入 Docker 环境变量。
docs for the base image 说明导入Docker环境的约定:
If you need environment variables from the docker command line (-e,--env=[]) add
source /etc/envvars
before you use them in the script file
所以我为 Apache 创建了 my own custom run
script — 我在执行 httpd
之前添加了 source /etc/envvars
。
我改写了the original run
script, by adding a simple COPY
to my Dockerfile:
COPY apache-run.sh /etc/sv/apache2/run
这成功确保了我的 $XDEBUG_CONFIG
在启动时对 httpd
可见。通过在网页中打印 phpinfo();
,我能够确认这影响了我的 PHP 配置。
对我来说,使用官方 PHP-FPM-Alpine docker 图像 (FROM php:7-fpm-alpine
)
是一个不同的问题
我需要将 XDEBUG-CONFIG 添加到 fpm 池配置中:
env[XDEBUG_CONFIG] = $XDEBUG_CONFIG
我正在 运行在 Docker 上安装一个 PHP 应用程序,我想使用 XDebug 对其进行调试。 在我的 docker-compose 中,我在 phpfpm 部分添加了以下行:
environment:
XDEBUG_CONFIG: "remote_enable=1 remote_host=192.168.110.29 remote_port=9000 idekey=PHPSTORM remote_autostart=1"
PHP_IDE_CONFIG: "serverName=reports.dev"
我以正确的方式配置了 PHPStorm,侦听端口 9000 和 运行 应用程序。
应用程序运行完美,但 XDebug 似乎无法运行。
如果我在 php.ini 文件中移动配置行,调试器就会工作,除了服务器名称为空并且我无法调试(这就是为什么我尝试遵循 docker-组合配置方式)。
如果在 docker 容器内,我 运行 echo $XDEBUG_CONFIG 输出是正确的,但 XDebug 似乎没有读取那个 Env 变量。
你做了phpinfo();
吗?那应该告诉你使用的设置。
我遇到了同样的问题...我花了很长时间才弄明白。你在使用 xdebug.remote_connect_back=1
吗?如果是这样,请删除该行。
我的 nginx 代理正在转发一个 IP(这是错误的),因此 XDEBUG_CONFIG 中设置的 ip 被忽略了。
我遇到了同样的问题。我的图像是基于 nimmis/alpine-apache-php7/
. I found that the image was using supervisor
来启动进程的。 supervisor
不知道 Docker 环境变量。
告诉 supervisor
进程需要 运行 的惯例是在 /etc/sv/{process}/run
处创建一个 run
脚本。 A script like this 用于启动 Apache。我需要更改脚本,以便在启动 Apache 之前导入 Docker 环境变量。
docs for the base image 说明导入Docker环境的约定:
If you need environment variables from the docker command line (-e,--env=[]) add
source /etc/envvars
before you use them in the script file
所以我为 Apache 创建了 my own custom run
script — 我在执行 httpd
之前添加了 source /etc/envvars
。
我改写了the original run
script, by adding a simple COPY
to my Dockerfile:
COPY apache-run.sh /etc/sv/apache2/run
这成功确保了我的 $XDEBUG_CONFIG
在启动时对 httpd
可见。通过在网页中打印 phpinfo();
,我能够确认这影响了我的 PHP 配置。
对我来说,使用官方 PHP-FPM-Alpine docker 图像 (FROM php:7-fpm-alpine
)
我需要将 XDEBUG-CONFIG 添加到 fpm 池配置中:
env[XDEBUG_CONFIG] = $XDEBUG_CONFIG