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

查看完整配置 https://github.com/attrib/docker-symfony