我正在尝试调试通过 Docker 在 WSL2 上运行的 Laravel Sail。我想在没有 Docker Desktop 的情况下执行此操作,因为现在需要许可证才能在公司环境中使用。
我一直按照本指南进行设置
在 PHPStorm 2023 中使用 XDebug 3 调试 Laravel Sail:详细指南
步骤(简短版)
安装 Laravel Sail:
composer require laravel/sail --dev && php artisan sail:install
更改/添加:
SAIL_XDEBUG_CONFIG="client_host=host.docker.internal idekey=docker"
至您的.env
文件
将
PHP_IDE_CONFIG: "serverName=Docker"
添加到 laravel.test 服务的 docker-compose.yml
环境部分
(重新)使用
./vendor/bin/sail up -d
启动容器
在“PhpStorm -> 设置 -> PHP”中添加新的 PHP 解释器,然后选择选项“来自 Docker、Vagrant...”
将网络模式调整为您可以通过docker网络列表获取的sail网络名称
将解释器的容器路径值从
/opt/project
更改为 /var/www/html
在“PhpStorm -> 设置 -> PHP -> 调试”中,将 Xdebug 的端口更改为
9003
在“PhpStorm -> 设置 -> PHP -> 服务器”中添加一个新服务器来使用您的测试套件:
APP_PORT
来自.env
var/www/html
在“PhpStorm -> 设置 -> PHP -> 服务器”中添加另一个服务器来拦截 Web 请求:
var/www/html
在“PhpStorm -> 设置 -> PHP -> 测试框架”中添加一个新的远程解释器,其作曲家自动加载路径为
/var/www/html/vendor/autoload.php
应用所有更改,启用调试连接侦听器并开始调试
我已在 WSL 中启用 IPv4,因为当我查询网络时,我从 Windows 计算机获得了用于 WSL 以太网的 IPv6 网络地址。
来自 WSL 我的网络是:
**219df3435040** `example-app_sail bridge local`
3: br-219df3435040: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:97:4b:39:90 brd ff:ff:ff:ff:ff:ff
inet 172.20.0.1/16 brd 172.20.255.255 scope global br-219df3435040
valid_lft forever preferred_lft forever
inet6 fe80::42:97ff:fe4b:3990/64 scope link
valid_lft forever preferred_lft forever
我已将
client_host=host.docker.internal
更改为 client_host=172.20.0.1
当我在 PhpStorm 上监听时,我在 docker 中收到错误:
laravel.test-1 |警告 Xdebug:[步骤调试] 无法连接到调试客户端。尝试过:172.20.0.1:9003(通过xdebug.client_host/xdebug.client_port)
我也不确定指南上的这条线是否正确,因为
serverName
和 idekey
是不同的:
SAIL_XDEBUG_CONFIG="client_host=host.docker.internal idekey=docker" to your .env file Add PHP_IDE_CONFIG: "serverName=Docker" to your docker-compose.yml
感谢 LazyOne 提供的信息以及其他提供帮助的人。这对于诊断问题确实很有帮助。我安装了wireshark来查看是否可以查看应用程序的wsl网桥网络接口上的流量。事实证明,上述指南中的这一点是错误的。我注意到除了 ping 之外没有任何可见的流量?然后我尝试使用 eth0 接口 ip 来检查流量,结果成功了。对于 client_host 我使用了我的 windows ip 并且它有效。所有内置变量,例如 client_host=host.docker.internal 和 xdebug://gateway 完全让我失望。 我用来让它工作的 sail .env 配置是
SAIL_XDEBUG_MODE=develop,debug
SAIL_XDEBUG_CONFIG="client_host=192.168.1.219 discover_client_host=False idekey=DockerIDE"
我明确设置了 discovery_client_host 选项,因为自动发现也不起作用。