【问题标题】:Can't connect PhpStorm with xdebug with Docker无法将 PhpStorm 与 xdebug 与 Docker 连接
【发布时间】:2018-04-27 08:23:43
【问题描述】:

我有以下 Dockerfile:

 FROM php:7.0-fpm-alpine

RUN  apk add --update --virtual build_deps gcc g++ autoconf make &&\
  docker-php-source extract &&\
  pecl install xdebug &&\
  echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /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_handler = dbgp" >> /usr/local/etc/php/conf.d/xdebug.ini &&\
  echo "xdebug.remote_mode = req" >> /usr/local/etc/php/conf.d/xdebug.ini &&\
  docker-php-ext-enable xdebug &&\
  docker-php-source delete && \
  apk del build_deps && \
  rm -rf /var/cache/apk/* && \
  rm -rf /tmp/*

ENTRYPOINT ["php-fpm"]

我使用以下docker-compose.yml 运行它:

version: '2'
services:
  nginx_dev:
    image: nginx:alpine
    ports:
      - "5092:5092"
    links:
      - "my_symfony_www_dev"
    volumes:
      - './conf/nginx/nginx_dev.conf:/etc/nginx/nginx.conf:ro'
      - './logs/dev:/var/logs'
    volumes_from:
      - 'my_symfony_www_dev'

    my_symfony_www_dev:
      build:
        context: .
        dockerfile: Dockerfile_dev
      image: "myimage/my_symfony_app:dev_php"  
      volumes:
        - "$SOURCE_PATH:/var/www/html:Z"
      environment:
        - PHP_IDE_CONFIG= "serverName=my_symfony_www_dev"
        - XDEBUG_CONFIG="remote_host=10.254.254.254,remote_port=9080"
        - PHP_XDEBUG_ENABLED=1

也如there我所见:

sudo ip addr add 10.254.254.254/24 brd + dev enp4s0 label enp4s0:1

然后像这样配置 PhpStorm IDE:

然后在 Firefox 中按下 按钮,在 PhpStorm 中按下 按钮我在app_dev.php 上设置断点,但没有任何反应。

我的系统通过netstat -ntlp 命令通过PhpStorm 侦听的端口9080 进行侦听(根据that answer,PhpStorm 是一个服务器)。

tcp        0      0 0.0.0.0:9080            0.0.0.0:*               LISTEN      4773/java       

您知道为什么会发生这种情况以及如何解决吗?

编辑 1:

phpinfo() 显示:

我还将 de cocker-compose.yml 设置为:

version: '2'
services:
  nginx_dev:
    image: nginx:alpine
    ports:
      - "5092:5092"
    links:
      - "my_symfony_www_dev"
    volumes:
      - './conf/nginx/nginx_dev.conf:/etc/nginx/nginx.conf:ro'
      - './logs/dev:/var/logs'
    volumes_from:
      - 'my_symfony_www_dev'

    my_symfony_www_dev:
      build:
        context: .
        dockerfile: Dockerfile_dev
      image: "myimage/my_symfony_app:dev_php"  
      volumes:
        - "$SOURCE_PATH:/var/www/html:Z"
      environment:
        - XDEBUG_CONFIG="remote_host=10.254.254.254,remote_port=9080"
        - PHP_XDEBUG_ENABLED=1

我的 dockerfile 是:

FROM php:7.0-fpm-alpine

RUN  apk add --update --virtual build_deps gcc g++ autoconf make &&\
  docker-php-source extract &&\
  pecl install xdebug &&\
  echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /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=0" >> /usr/local/etc/php/conf.d/xdebug.ini &&\
  echo "xdebug.remote_handler = dbgp" >> /usr/local/etc/php/conf.d/xdebug.ini &&\
  echo "xdebug.remote_mode = req" >> /usr/local/etc/php/conf.d/xdebug.ini &&\
  docker-php-ext-enable xdebug &&\
  docker-php-source delete && \
  apk del build_deps && \
  rm -rf /var/cache/apk/* && \
  rm -rf /tmp/*

ENTRYPOINT ["php-fpm"]

还是一样的结果。

【问题讨论】:

  • 1) 收集通过浏览器捕获的phpinfo() 输出(当您尝试调试网页时)——顶部标题表 + xdebug 特定部分。这是为了确认当前应用/激活的设置; 2) 为此类不成功的调试会话启用并收集 xdebug 日志; 3) 你的 Dockerfile 中有xdebug.remote_connect_back=1——使用这个选项,xdebug 会忽略xdebug.remote_host 的值。到目前为止,它一定是错误的 IP 问题——xdebug 必须尝试连接但连接到错误的 IP(例如可能是因为 #3)
  • 4) 您指定了serverName=my_symfony_www_dev。在这种情况下,PHP | Servers 中的主机字段也应该使用它——这就是 PhpStorm 识别要使用的服务器条目的方式。
  • 希望this answer能帮到你
  • 1) 不要默默地更新帖子——没有人会收到通知。 2) xdebug 日志在哪里? 3) 您的 xdebug 信息屏幕截图显示您的 docker_compose 文件中的XDEBUG_CONFIG 没有被应用,至少在您期望的方式上(端口和 remote_host 仍在使用默认值)。
  • 您也可以在代码xdebug_break(); 中使用此函数,而不是在phpstorm 中使用断点。如果这触发了 phpstorm 中的调试功能,那么你的路径映射可能有问题

标签: php docker phpstorm xdebug


【解决方案1】:

最后,我必须在我的Dockerfile 上添加以下内容:

FROM php:7.0-fpm-alpine

VOLUME /var/log/xdebug

ARG XDEBUG_HOST="172.17.0.1"
ARG XDEBUG_PORT=9021

RUN  apk add --update --virtual build_deps gcc g++ autoconf make &&\
  docker-php-source extract &&\
  pecl install xdebug &&\
  docker-php-ext-enable xdebug &&\
  && 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_handler = dbgp" >> /usr/local/etc/php/conf.d/xdebug.ini &&\
  echo "xdebug.remote_mode = req" >> /usr/local/etc/php/conf.d/xdebug.ini &&\
  echo "xdebug.remote_host=${XDEBUG_HOST}" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini &&\
  echo "xdebug.remote_port=${XDEBUG_PORT}" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini &&\
  docker-php-source delete && \
  apk del build_deps && \
  rm -rf /var/cache/apk/* && \
  rm -rf /tmp/*

ENTRYPOINT ["php-fpm"]

XDEBUG_HOST 构建参数包含 GNU/Linux 系统上docker0 网络接口的 ip(使用 ifconfig 查找)。

通过我的docker-compose.yml,我提供以下信息:

version: '2'
services:
  nginx_dev:
    image: nginx:alpine
    ports:
      - "5092:5092"
    links:
      - "my_symfony_www_dev"
    volumes:
      - './conf/nginx/nginx_dev.conf:/etc/nginx/nginx.conf:ro'
      - './logs/dev:/var/logs'
    volumes_from:
      - 'my_symfony_www_dev'

    my_symfony_www_dev:
      build:
        context: .
        dockerfile: Dockerfile_dev
        args:
          XDEBUG_HOST: 172.17.0.1
          XDEBUG_PORT: 9021
      image: "myimage/my_symfony_app:dev_php"  
      volumes:
        - "$SOURCE_PATH:/var/www/html:Z"

在映射到卷上的./conf/nginx/nginx_dev.conf 上,我在server 部分设置了以下设置:

server_name 0.0.0.0;

然后在 phpstorm 上使用以下设置:

那你就可以走了!

【讨论】:

    猜你喜欢
    • 2013-01-13
    • 2016-10-01
    • 1970-01-01
    • 2021-03-25
    • 2021-02-25
    • 2018-06-03
    • 2015-08-03
    • 2020-02-19
    • 2020-02-26
    相关资源
    最近更新 更多