从 Docker 容器内部使用 XDebug 进行远程调试不起作用

我正在尝试设置 Dockered AMP 环境,但无法让远程调试器正常工作。我的设置如下:

我有一个运行mysql的数据库容器,它就像一个魅力。我用下面的Dockerfile构建了一个Docker镜像'phpmysqli'

FROM php:apache

RUN docker-php-ext-install mysqli mbstring

# zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so
RUN pecl install xdebug
RUN echo 'zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so' >> /usr/local/etc/php/php.ini
RUN touch /usr/local/etc/php/conf.d/xdebug.ini; \
    echo xdebug.remote_enable=1 >> /usr/local/etc/php/conf.d/xdebug.ini; \
    echo xdebug.remote_autostart=0 >> /usr/local/etc/php/conf.d/xdebug.ini; \
    echo xdebug.remote_connect_back=1 >> /usr/local/etc/php/conf.d/xdebug.ini; \
    echo xdebug.remote_port=9000 >> /usr/local/etc/php/conf.d/xdebug.ini; \
    echo xdebug.remote_log=/tmp/php5-xdebug.log >> /usr/local/etc/php/conf.d/xdebug.ini;

RUN echo 'date.timezone = Europe/Berlin' > /usr/local/etc/php/conf.d/date.ini

我打电话

docker run --rm -ti  --name web -p 127.0.0.1:8080:80 -v /path/to/projects:/var/www/html --link db:db  phpmysqli

在此 phpinfo 之后,php -i 分别显示 xdebug 2.3.2 已启动并正在运行。

接下来,我在IntelliJ IDEA中设置了一个名为“Docker”的服务器,其中包含主机,端口和调试器Xdebug。我设置的路径映射类似于 docker run 语句中的卷映射。127.0.0.18080

PHP->Debug 设置中,我检查了是否将端口用于传入连接,是否接受外部连接,以及是否不会忽略来自未注册服务器的连接。9000

在此之后,我还创建了一个名为Docker的新PHP远程调试配置。服务器是 Docker,会话 ID 是 。XDEBUG_IDEA

我可以在容器上调用PHP文件,我可以通过链接连接到数据库...但是由于某种原因,当我尝试启动调试会话时,没有任何反应。我尝试使用cookie(是的,我在xdebug助手中设置为会话ID)。我尝试发送为...XDEBUG_IDEAXDEBUG_SESSION_START=XDEBUG_IDEAGET

你们这些聪明的人能告诉我我错过了什么吗?


答案 1

您可以尝试使用此配置。php-apache build提供了两种编译和启用php模块的方法。最好用于设置正确的文件配置。docker-php-ext-enable xdebug

FROM php:5.4-apache

# Enable and configure xdebug
RUN pecl install xdebug
RUN docker-php-ext-enable xdebug
RUN sed -i '1 a xdebug.remote_autostart=true' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN sed -i '1 a xdebug.remote_mode=req' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN sed -i '1 a xdebug.remote_handler=dbgp' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN sed -i '1 a xdebug.remote_connect_back=1 ' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN sed -i '1 a xdebug.remote_port=9000' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN sed -i '1 a xdebug.remote_host=127.0.0.1' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN sed -i '1 a xdebug.remote_enable=1' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini

答案 2

对于我在PHP,NGINX Docker环境中使用Sublime,我让它使用这些设置:

xdebug.remote_enable = 1
xdebug.remote_mode = req
xdebug.remote_port = 9001
xdebug.remote_connect_back=0
xdebug.remote_host=host.docker.internal

我花了很长时间才弄清楚的是将remote_host设置为host.docker.internal。


推荐