使用PhpStorm和Xdebug在Docker中调试Symfony2

时间:2016-08-23 14:34:57

标签: symfony docker phpstorm xdebug

按照本教程,我正在尝试使用PhpStorm调试Symfony应用程序: https://gist.github.com/chadrien/c90927ec2d160ffea9c4

我做的完全一样,但效果不好。

php-fpm:
    build: ./php
    container_name: php-fpm-symfony
    links:
        - db
    ports:
        - 9000:9000
        - 8448:8448
        - 8000:8000
    working_dir: /var/www/html/
    volumes:
        - ../:/var/www/html
    volumes_from:
        - data
    tty: true
    env_file:
        - ./docker.env
    environment:
        XDEBUG_CONFIG: remote_host=192.168.0.176

Dockerfile

# XDEBUG
RUN yes | 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=on" >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.remote_autostart=off" >> /usr/local/etc/php/conf.d/xdebug.ini

当我使用PhpStorm启动调试时,似乎连接正在发生。我的浏览器中会弹出一个新窗口。我的Symfony主页就在这里。 但它并没有停留在我的断点上。并且逐步调试不起作用。

我做错了吗?

2 个答案:

答案 0 :(得分:3)

用docker-for-mac公开9000是错误的 - 你的方向错了。

IDE,PHPstorm,侦听端口9000,这意味着它在这个9000上打开一个套接字,它不会连接到这个端口。

另一方面,xdebug连接,附加到通常是localhost的端口9000 - 如果它找到了一个监听器,它们会说话。这个,因为在9000上没有服务,转发端口不仅没有意义,它实际上甚至会对你造成伤害,因为端口9000将被带到OSX主机localhost上,而你的PHPstorm将不再能够监听它。 / p>

你想做的是

  1. 删除'9000:9000'
  2. 使用此配置https://gist.github.com/EugenMayer/3019516e5a3b3a01b6eac88190327e7c a)为您的OSX localhost环回设备创建一个别名 b)将您的FPM xdebug配置为connect_back到此ip
  3. 现在,非常简单,只需按下此按钮https://drive.google.com/file/d/0B3SrxyqujSqxeFZoMmdrbDB6SzQ/view,这样就没有上面的“红色图标”,但它全部为绿色。 4)现在使用你的浏览器,像往常一样使用xdebug插件,如https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc或Firefox替代品,因为你真的不想在xdebug配置中使用“autostart”,正如我想的那样
  4. 多数民众赞成,

      由于环回设备别名,
    1. 可移植到其他开发设备
    2. 您不需要配置debug-env,而是使用快速调试,几乎在所有情况下都更方便

答案 1 :(得分:0)

另一个答案是正确的,您必须删除端口部分中的- 9000:9000

另一个问题是您的docker容器需要知道docker主机的IP地址。这是正确的端口9000连接到。

自docker 18.03发布以来,您可以在运行docker容器时使用host.docker.internal DNS条目。

您可以在安装xdebug的RUN语句中添加另一个回显线:

&& echo "xdebug.remote_host=host.docker.internal" >> /usr/local/etc/php/conf.d/xdebug.ini \