Xdebug:连接调试客户端超时

问题描述 投票:0回答:3

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


PHP 8.1
拉拉维尔 9

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

SAIL_XDEBUG_MODE=develop,debug
SAIL_XDEBUG_CONFIG="client_host=172.23.0.1"

但是当我运行

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

laravel docker-compose laravel-sail
3个回答
3
投票

我一直在搜索这个问题,直到我读到这是防火墙端口问题这里

然后我记得

docker-compose.yml
上的 services.[laravel.test].ports 并尝试添加
9003:9003
端口。

尝试添加 XDebug 端口:

services:
    laravel.test:
        build:
            context: ...
            dockerfile: Dockerfile
            args:
                WWWGROUP: '${WWWGROUP}'
        image: ...
        extra_hosts:
            - 'host.docker.internal:host-gateway'
        ports:
            - '${APP_PORT:-80}:80'
            - '${VITE_PORT:-5173}:${VITE_PORT:-5173}'
            - '9003:9003'
        ...

1
投票

解决方案

只需将其放入您的

.env
以下

SAIL_XDEBUG_MODE=develop,debug
SAIL_XDEBUG_CONFIG="client_host=host.docker.internal"

就像在 Windows 和 MacOS 中一样

现在您可以运行

sail debug migrate
或仅运行
sail debug
来测试它。

说明

您可能正在使用

sail down
来“停止”容器,但正如 docker 文档所述

docker-compose down

...

停止容器并删除由

up
创建的容器、网络、卷和映像。

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

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

因此,每次运行时

sail up
,它都会使用新的 IP 地址重新生成网络。

您可以使用

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

根据 v1.10.1,sail 包含

extra_host
选项,本质上是检测主机的 IP:

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

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


0
投票

我建议检查您的防火墙。 在 Linux 上,我启用了 ufw,它阻止了来自 Xdebug 的连接。

© www.soinside.com 2019 - 2024. All rights reserved.