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

标签 php intellij-idea docker xdebug remote-debugging

我正在尝试设置一个停靠的 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”的服务器,主机 127.0.0.1、端口 8080 和调试器 Xdebug。我设置了类似于 docker run 语句中的卷映射的路径映射。

PHP->Debug settings 我检查了我使用端口 9000 进行传入连接,我将接受外部连接并且我不会忽略来自未注册的连接服务器。

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

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

各位聪明人能告诉我我错过了什么吗?

最佳答案

您可以尝试使用此配置。 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

关于php - 从 Docker 容器内部使用 XDebug 进行远程调试不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30594804/

相关文章:

java - Docker compose for mysql 和 spring 应用程序拒绝访问

javascript - 使用引导代码点火器将数据从 Controller 发送到弹出模式

php - PDO INSERT 不适用于 $_POST 变量

java - 我想在控制台中使用 Git,并使用 Intellij 作为我的

java - 编译嵌入式Grizzly Jersey应用程序找不到Jersey资源

docker - 如何在构建期间使用Docker配置文件

php - 使用 PHP 和 PDO 减少多行的列值

php - Magento A-Z 页面

java - 我应该在哪里存储第三方库以包含在 IntelliJ IDEA 项目中?

docker - Mac Thingsboard Docker-无法连接到Cassandra