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

问题描述:

我在Docker上运行PHP应用程序,我想使用XDebug进行调试。 在我的码头工人,撰写添加以下线路中的phpfpm部分:Xdebug(Docker容器内部)忽略XDEBUG_CONFIG环境变量

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-compose配置方式)的事实。

如果在Docker容器中运行echo $ XDEBUG_CONFIG,输出是正确的,但是XDebug似乎不会读取Env变量。

+0

1)你服务/尝试调试网页?如果是这样的 - 配置的服务器名称存在(尤其是如果它nginx的 - 很多时候它是空白)。 2)你如何启动容器?我的意思是 - 您使用PhpStorm这个,或者它从外部(终端)进行管理? https://youtrack.jetbrains.com/issue/WI-33800 – LazyOne

+0

1)是的,我正在调试网页,是的,nginx中的服务器名称没有定义,因为代码不在容器内,所以我有一个docker为我所有的项目构成,我不愿意改变它。 2)我使用在终端外phpstorm搬运工-构成的。 顺便说一句,这并不回答我的问题,我不明白为什么没有被Xdebug的容器内读XDEBUG_CONFIG – sangio90

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

要通知supervisor需要运行进程的约定是在/etc/sv/{process}/run处创建run脚本。 A script like this被用来启动Apache。我需要更改脚本,以便在启动Apache之前导入Docker环境变量。

docs for the base image解释公约导入泊坞环境:

如果需要从泊坞窗命令行环境变量(-e, - ENV = [])添加

source /etc/envvars

然后在脚本文件中使用它们

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

我改写the original run script,通过把一个简单COPYmy Dockerfile

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

这成功地确保了我$XDEBUG_CONFIG是可见的httpd在它推出的时间。通过在网页上打印phpinfo();,我能够确认这会影响我的PHP配置。

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

我有同样的问题......带我永远弄清楚。您是否在使用xdebug.remote_connect_back=1?如果这样删除该行。

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

对我来说是使用官方的PHP-FPM-高山搬运工像一个不同的问题(FROM php:7-fpm-alpine

我需要对Xdebug的-CONFIG添加到FPM池配置: env[XDEBUG_CONFIG] = $XDEBUG_CONFIG

查看全部配置https://github.com/attrib/docker-symfony