我在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变量。
答案 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_CONFIG
在httpd
启动时可见。通过在网页中打印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