symfony - 使用 PhpStorm 和 Xdebug 在 Docker 中调试 Symfony2

标签 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

文件
# 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 主页在这里。
但它并没有停在我的断点上。而且分步调试是不行的。

我做错什么了吗?

最佳答案

用 docker-for-mac 暴露 9000 是错误的——你搞错了方向。

IDE PHPstorm 监听 9000 端口,这意味着它在这个 9000 上打开了一个套接字,它没有连接到这个端口。

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

你想做的是

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

  • 就是这样,它是
  • 由于环回设备别名
  • 可移植到其他开发设备
  • 您不需要配置调试环境,而是使用快速调试,这几乎在所有情况下都更方便
  • 关于symfony - 使用 PhpStorm 和 Xdebug 在 Docker 中调试 Symfony2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39104108/

    相关文章:

    css - 如何让 PhpStorm File Watcher 也监视子文件夹

    postgresql - 如何永久删除 Doctrine 迁移?

    symfony - 预过滤列表的 Sonata 管理员操作按钮

    symfony - 学说 targetEntity 抽象类

    jenkins - 提交到 jenkins docker 镜像不保存更改

    Docker - json 文件驱动程序的工作原理

    docker - 如何在docker registry中设置镜像存储路径?

    PhpStorm 代码重构 elseif PHP

    symfony - Symfony2 中的实体表单字段和验证?

    phpstorm - 禁用警告 'the thrown object must be an instance of the exception'