【问题标题】:Laradock + PhpStorm + Xdebug Fails whereas PhpStorm Validation SucceedsLaradock + PhpStorm + Xdebug 失败,而 PhpStorm 验证成功
【发布时间】:2018-03-23 09:18:40
【问题描述】:

我已经为 PhpStorm 设置了调试配置,并且已通过 PhpStorm 成功验证:

还安装了 Chrome 的 Xdebug 助手。

问题是,当我开始侦听调试连接并在打开 Xdebug 帮助程序的情况下重新加载所需页面时,什么也没有发生。也试过这个bookmarklets,但没有运气。

没有错误什么的,什么都没有。

还尝试将不同的 IP 设置为 dockerhost:来自 192.168.. 范围(来自网络设置),来自 172.* 范围(来自 nginx),来自 10.* 范围(10.0.75.1 是默认)。还尝试了docker.for.mac.internal.host,它在容器启动时失败了。

Docker 17.02、macOS Sierra、PhpStorm 2017.3

【问题讨论】:

  • "并且它已被 PhpStorm 成功验证" PhpStorm 会检查 php.ini 中的值是否有意义以及端口号是否与 IDE 中的值匹配。它检查实际的连接(如果 Xdebug 能够连接)。
  • 1) 确保 IDE 正在监听 xdebug conn(活动的“电话句柄”图标) 2) 确保在该端口上监听的是 PhpStorm 而不是其他应用程序(例如 php-fpm)- sudo lsof -nP -iTCP -sTCP:LISTEN 左右 3) 收集 xdebug 日志——它将告诉它尝试连接的位置以及响应是什么。但总的来说:xdebug.remote_host 必须指向运行 PhpStorm 的 IP(从容器内部看;docker.for.mac.internal.host 也可以工作——我不是 Mac 用户,所以不能肯定地说)。 4) 您需要禁用connect_back,因为在这种情况下remote_host 会被忽略。 RTM。
  • 1) 是的; 2) phpstorm 74846 376u IPv4 0x82e89367ea55f7d 0t0 TCP *:9000 (LISTEN); 3) 跳过; 4) remote_connect_back - 就是这样!谢谢!禁用它后,我设法连接!从来没有想过它可能会导致这个问题。由于某种原因,它在 laradock 中默认启用。

标签: debugging docker networking phpstorm xdebug


【解决方案1】:

如果您使用的是 linux,请务必在您的防火墙中创建相应的规则。

但要更有效地解决此问题,您需要收集更多信息。

  1. 在你里面启用 xdebug 日志 xdebug.remote_log=/var/www/xdebug.log xdebug.ini 或者您可以将其附加到 PHPStorm 的“Cli Interpreters > Configuration Options”中(xdebug.remote_log,/path/inside/workspace/container/xdebug.log)

  2. 您可以采取的另一个步骤是监视与您的计算机的传入连接。 (在安装 docker 的地方运行它)。它将开始侦听端口 9000 上的所有传入连接尝试。

sudo tcpdump -i any port 9000

现在运行一次调试器,检查容器内的日志(默认是工作区),看看是否有任何来自容器的传入连接尝试。

如果您看到类似Time-out connecting to client (Waited: 200 ms). :-( 的信息,则可能是您的防火墙阻止了传入连接。

要打开它们,您可以使用 ufw 添加规则

sudo ufw allow in from 172.22.0.0/24 to any port 9000(或写下特定的 ip)一定要仔细检查这是不是试图连接的 ip

这将允许来自 172.22.0.* 的端口 9000 上的所有连接(这是 laradock 用于其虚拟网络的内容)。请务必仔细检查日志,可能您的设置使用不同的 IP 范围)

我的工作 xdebug.ini(在 php-fpm 和工作区容器中都是相同的)

xdebug.remote_host=dockerhost
xdebug.remote_connect_back=0
xdebug.remote_port=9000
xdebug.idekey=PHPSTORM

xdebug.remote_autostart=1
xdebug.remote_enable=1
xdebug.remote_log=/var/www/xdebug.log

xdebug.cli_color=1
xdebug.profiler_enable=0
xdebug.profiler_output_dir="~/path/to/profiler.log"

xdebug.remote_handler=dbgp
xdebug.remote_mode=req

xdebug.var_display_max_children=-1
xdebug.var_display_max_data=-1
xdebug.var_display_max_depth=-1

如果上述方法都不起作用,那么另一个步骤是检查您是否已经在端口 9000 上运行了任何容器。如果是这样,那么您将需要使用另一个端口,只是不要忘记从 docker 中公开它。

(解释:docker 将端口绑定(公开)到主机,以便任何传入连接都被定向到正确的容器,如果采用 9000,xdebug 将无法连接到您机器上的任何 IDE,即使IDE 说它正在运行侦听器) 希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多