【问题标题】:How should I setup PhpStorm in order to debug microservices with Docker?我应该如何设置 PhpStorm 以便使用 Docker 调试微服务?
【发布时间】:2021-08-26 11:40:26
【问题描述】:

假设我有两个微服务在两个不同的 Docker 容器中运行:ServiceAServiceBServiceAServiceB 发出 HTTP 请求,然后这个请求返回一个响应。如果可能的话,我希望能够在ServiceA(PhpStorm 的实例)中启动我的调试会话,并在发送呼叫后将其切换到ServiceB(PhpStorm 的实例),然后返回到ServiceA .需要说明的是,我将打开两个 PhpStorm 窗口:一个用于ServiceA,一个用于ServiceB

以下是我当前配置的一些注意事项:

  • ServiceA:PHP 7.4.x,Xdebug 3.0.4
  • ServiceB:PHP 7.2.x、Xdebug 3.0.4

ServiceAServiceB 的 Xdebug 设置相同:

zend_extension=xdebug.so
xdebug.mode=debug
xdebug.discover_client_host=true

根据 PhpStorm 中的 File | Settings | PHP | Debug 配置,它们如下所示,对于 ServiceAServiceB 相同:

因为ServiceB 应该是监听传入连接,所以这个绿色的小虫子工具栏是这样的:

我遇到了什么问题?

  • 我可以在ServiceA 中启动调试会话,但它永远不会切换到ServiceB,但会话正确完成。
  • 以下“警告”垃圾邮件我的stdout 日志ServiceB

Xdebug:[Step Debug] 无法连接到调试客户端。已尝试:172.18.0.9:9003(来自 REMOTE_ADDR HTTP 标头),localhost:9003(通过 xdebug.client_host/xdebug.client_port 回退)

我可能在这里遗漏了什么?

注意:如果需要更多信息,请询问我,我会添加它

【问题讨论】:

  • "xdebug.discover_client_host=true" 这很可能不会做你想做的事。它使用 HTTP 标头找出 HTTP 请求来自的 IP 地址,并使 Xdebug(尝试)连接到该机器上的 IDE。我敢打赌 172.18.0.9:9003 没有你的 IDE 监听它。

标签: php docker phpstorm xdebug xdebug-3


【解决方案1】:

xdebug.start_with_request = yes 选项告诉 Xdebug 尝试调试每个请求/脚本。如果 Xdebug 无法连接到调试客户端(它从 xdebug.client_hostxdebug.client_port 获取值)然后它会通知您。

通常这样的消息会被写入标准 PHP 的错误日志。看起来你根本没有在你的 php.ini 中配置它(因为这是默认的),因此 PHP 将它发送到你的标准输出。

如果你想阻止它出现在你的终端输出中,你必须将 PHP error_log 指向一个有效的位置。

在我的案例中如何解决它的示例:

1- 编辑您的 ini 文件:

sudo vi /etc/php/7.4/cli/php.ini

2- 并添加这一行:

error_log = /var/www/log/php_error.log

注意:将之前的路由更改为您想要的任何有效目录。

3- 再试一次,警告应该会消失,现在进入日志文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 2017-10-17
    • 2018-12-27
    • 2020-01-04
    • 2020-01-20
    相关资源
    最近更新 更多