Xdebug(在Docker容器内)忽略XDEBUG_CONFIG环境变量

san*_*o90 5 php xdebug environment-variables phpstorm docker

我在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"
Run Code Online (Sandbox Code Playgroud)

我以正确的方式配置PHPStorm,侦听端口9000并运行应用程序.

该应用程序完美无缺,但XDebug似乎没有工作.

如果我移动php.ini文件中的配置行调试器工作,除了服务器名称为空并且我无法调试的事实(这就是为什么我尝试遵循docker-compose配置方式).

如果,在docker容器内,我运行echo $ XDEBUG_CONFIG输出是正确的,但是XDebug似乎没有读取那个Env变量.

Bir*_*abs 5

我有同样的问题。我的图像基于nimmis/alpine-apache-php7/. 我发现该图像supervisor用于启动进程。supervisor不了解 Docker 环境变量。

告诉supervisor进程需要运行的约定是run/etc/sv/{process}/run. 使用这样的脚本来启动 Apache。我需要更改脚本,以便在启动 Apache 之前导入 Docker 环境变量。

基础镜像文档解释了导入 Docker 环境的约定:

如果您需要来自 docker 命令行的环境变量 (-e,--env=[]) 添加

source /etc/envvars

在脚本文件中使用它们之前

所以我为 Apache创建了自己的自定义run脚本——我source /etc/envvars在执行httpd.

我通过在我的 Dockerfile 中添加一个简单的内容来覆盖原始run脚本COPY

COPY apache-run.sh /etc/sv/apache2/run
Run Code Online (Sandbox Code Playgroud)

这成功地确保了 my在启动时$XDEBUG_CONFIG可见httpd。通过phpinfo();在网页中打印,我能够确认这影响了我的 PHP 配置。