我正在尝试在我的 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
我一直在搜索这个问题,直到我读到这是防火墙端口问题这里。
然后我记得
docker-compose.yml上的
services.[laravel.test].ports
并尝试添加 9003:9003
端口。
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'
...
只需将其放入您的
.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+。
我建议检查您的防火墙。 在 Linux 上,我启用了 ufw,它阻止了来自 Xdebug 的连接。