【问题标题】:Xdebug - trigger debug in PhpStorm from inside a dockerXdebug - 从 docker 内部触发 PhpStorm 中的调试
【发布时间】:2020-10-04 01:58:54
【问题描述】:

当从浏览器打开页面时,我已经能够让我的 PHP 脚本触发我在 PhpStorm 中的侦听器。我只需要在 docker 中安装 Xdebug,并使用

进行配置
xdebug.remote_connect_back = On
xdebug.remote_enable = On
xdebug.remote_autostart = Off

现在我希望在从 docker 内的 PHP CLI 调用脚本时触发它。我尝试了一些选项,例如php -dxdebug.remote_enable=1 -dxdebug.remote_autostart=1 -dxdebug.remote_connect_back=1 -dxdebug.idekey=PHPSTORM -dxdebug.remote_port=9000 myscript.php,但没有成功。我错过了什么吗?

【问题讨论】:

标签: php docker debugging phpstorm xdebug


【解决方案1】:

Dockerfile 需要有EXPOSE 9000(打开端口:9000)

...否则您将无法从外界连接xdebug。

将 IDE 放入容器是有问题的。

【讨论】:

  • 为什么?连接到 IDE 的是 Xdebug,而不是其他方式...
  • 它可以双向工作......在本地防火墙旁边可能会阻止:9000。
  • 如果 Docker 使用 TCP 9000 端口进行传入连接.. 那么 IDE 将无法在该端口上侦听...
  • 不应将 IDE 放入容器中 - 因此它必须从外部连接。在某些情况下这可能有用,但通常它只会使容器映像膨胀。实际上是xdebug 正在监听:9000(至少在它运行时,否则不会)。
  • “实际上是 xdebug 在 :9000 上监听(至少在它运行时,否则不是)” 请在做出此类声明之前查看 Xdebug 文档,尤其是“通讯设置”部分:xdebug.org/docs/remote#communication
【解决方案2】:

所以,感谢@LazyOne 的评论,我得到了答案。从 docker 内部,脚本不知道应该向哪个主机调试会话发送。我只需要从 docker 的 POV 中找到我的 PC ip,并将其用作主机。

用ip addr找到它并寻找docker0条目,然后将其用作主机:

export PHP_IDE_CONFIG="serverName=localhost"

php -dxdebug.remote_enable=1 -dxdebug.remote_autostart=1 -dxdebug.remote_connect_back=1 -dxdebug.idekey=PHPSTORM -dxdebug.remote_port=9000 -dxdebug.remote_host=172.17.0.4 myscript.php

【讨论】:

    猜你喜欢
    • 2016-12-30
    • 2013-09-29
    • 2016-01-07
    • 1970-01-01
    • 2017-07-20
    • 2014-09-29
    • 2015-06-24
    • 2014-08-21
    • 1970-01-01
    相关资源
    最近更新 更多