Xdebug:连接调试客户端超时

tho*_*son 7 laravel docker-compose laravel-sail

我正在尝试在我的 Ubuntu 20.04.3 LTS 桌面上使用最新版本的 laravel sail 设置 xdebug,


PHP 8.1
Laravel 9

.env 文件包含以下提到的详细信息

SAIL_XDEBUG_MODE=develop,debug
SAIL_XDEBUG_CONFIG="client_host=172.23.0.1"
Run Code Online (Sandbox Code Playgroud)

但当我跑步时sail debug migrate,返回

Xdebug: [Step Debug] Time-out connecting to debugging client, waited: 200 ms. Tried: 172.23.0.1:9003 (through xdebug.client_host/xdebug.client_port)

当我尝试查找 IP 时,每次
docker inspect -f {{range.NetworkSettings.Networks}}{{.Gateway}}{{end}} <container-name> 返回不同的 IP(例如 172.25.0.1)时它都会发生变化

小智 0

解决方案

.env只需将其放入以下内容中即可

SAIL_XDEBUG_MODE=develop,debug
SAIL_XDEBUG_CONFIG="client_host=host.docker.internal"
Run Code Online (Sandbox Code Playgroud)

就像在 Windows 和 MacOS 中一样

现在您可以运行sail debug migrate或只是sail debug为了测试它。

解释

您可能正在使用sail down“停止”容器,但正如docker 文档所述

docker-compose 下来

...

停止容器并删除由. 创建的容器、网络、卷和映像up

默认情况下,唯一删除的内容是:

  • Compose 文件中定义的服务的容器
  • Compose 文件的网络部分中定义的网络
  • 默认网络(如果使用)

因此,每次运行时,sail up它都会使用新的 IP 地址重新生成网络。

您可以使用sail stop,但是当您处理多个项目时,编辑.env每个项目的每个服务的端口(在文件中)可能会变得很麻烦。

根据v1.10.1,sail 包含了该extra_host选项,主要是检测主机的 IP

这样,每次我们创建/启动应用程序容器时,都会创建 host.docker.internal 映射并将其指向主机。

编辑:不要忘记更新 Docker,因为这只适用于 Docker v20.10+。