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

时间:2017-04-10 14:40:40

标签: php docker environment-variables phpstorm xdebug

我在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文件中移动配置行,则调试器工作,除了Server Name为空且我无法调试的事实(这就是为什么我尝试遵循docker-compose配置方式)。

如果在docker容器内部运行echo $ XDEBUG_CONFIG,则输出正确,但XDebug似乎没有读取该Env变量。

3 个答案:

答案 0 :(得分:2)

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

告诉supervisor需要运行流程的惯例是在run创建/etc/sv/{process}/run脚本。 A script like this用于启动Apache。我需要更改脚本,以便在启动Apache之前导入Docker环境变量。

docs for the base image解释了导入Docker环境的惯例:

  

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

     

source /etc/envvars

     

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

所以我为Apache创建了my own custom run script - 我在执行source /etc/envvars之前添加了httpd

我通过向the original run script添加一个简单的COPY来覆盖my Dockerfile

COPY apache-run.sh /etc/sv/apache2/run

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

答案 1 :(得分:1)

你做过phpinfo();吗?这应该告诉你使用的设置。

我遇到了同样的问题......让我永远明白了。你在使用xdebug.remote_connect_back=1吗?如果是,请删除该行。

我的nginx代理正在转发IP(这是错误的),因此忽略了XDEBUG_CONFIG中的IP设置。

答案 2 :(得分:0)

对我而言,使用官方的PHP-FPM-Alpine泊坞窗图像(FROM php:7-fpm-alpine

是一个不同的问题

我需要将XDEBUG-CONFIG添加到fpm池配置中: env[XDEBUG_CONFIG] = $XDEBUG_CONFIG

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