Xdebug(在Docker容器中)忽略XDEBUG_CONFIG环境variables

我正在Docker上运行一个PHP应用程序,我想用XDebug进行debugging。 在我的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" 

我正确地configuration了PHPStorm,在端口9000上监听并运行应用程序。

该应用程序完美的工作,但XDebug似乎并没有工作。

如果我移动php.ini文件中的configuration行,除了服务器名是空的,我不能debugging(这就是为什么我试图按照docker-composeconfiguration方式)的事实除外。

如果在Docker容器中运行echo $ XDEBUG_CONFIG,则输出是正确的,但是XDebug似乎没有读取Envvariables。

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

告诉supervisor一个进程需要运行的惯例是在/etc/sv/{process}/run创build一个run脚本。 这样的脚本被用来启动Apache。 我需要更改脚本,以便在启动Apache之前导入Docker环境variables。

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

如果你需要docker命令行的环境variables(-e, – env = [])add

source /etc/envvars

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

所以我为Apache创build了自己的自定义run脚本 – 在执行httpd之前,我添加了source /etc/envvars

我通过添加一个简单的COPY到我的Dockerfile来覆盖原来的run脚本 :

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

这成功地确保了我的$XDEBUG_CONFIG在启动时对httpd可见。 我能够确认,这影响了我的PHPconfiguration,通过打印phpinfo(); 在一个网页。

你做了一个phpinfo(); ? 这应该告诉你使用的设置。

我有同样的问题…永远把我弄明白。 你使用xdebug.remote_connect_back=1吗? 如果这样删除该行。

我的nginx代理是通过(这是错误的)转发IP,所以在XDEBUG_CONFIG设置的IP被忽略。

对我来说,使用官方PHP-FPM-Alpine泊坞窗图像( FROM php:7-fpm-alpine )是一个不同的问题。

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

查看完整的configurationhttps://github.com/attrib/docker-symfony