如何在没有 Docker Desktop 的 WSL2 上使用 Laravel Sail Docker 在 PhpStorm 中设置 Xdebug

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

我正在尝试调试通过 Docker 在 WSL2 上运行的 Laravel Sail。我想在没有 Docker Desktop 的情况下执行此操作,因为现在需要许可证才能在公司环境中使用。

我一直按照本指南进行设置

在 PHPStorm 2023 中使用 XDebug 3 调试 Laravel Sail:详细指南

步骤(简短版)

  1. 安装 Laravel Sail:

    composer require laravel/sail --dev && php artisan sail:install

  2. 更改/添加:

    SAIL_XDEBUG_CONFIG="client_host=host.docker.internal idekey=docker"
     至您的
    .env
     文件

  3. PHP_IDE_CONFIG: "serverName=Docker"
    添加到 laravel.test 服务的
    docker-compose.yml
    环境部分

  4. (重新)使用

    ./vendor/bin/sail up -d

    启动容器
  5. 在“PhpStorm -> 设置 -> PHP”中添加新的 PHP 解释器,然后选择选项“来自 Docker、Vagrant...”

  6. 将网络模式调整为您可以通过docker网络列表获取的sail网络名称

  7. 将解释器的容器路径值从 

    /opt/project
     更改为 
    /var/www/html

  8. 在“PhpStorm -> 设置 -> PHP -> 调试”中,将 Xdebug 的端口更改为

    9003

  9. 在“PhpStorm -> 设置 -> PHP -> 服务器”中添加一个新服务器来使用您的测试套件:

    • 名称:Docker
    • 主机:本地主机
    • 港口
      APP_PORT
      来自
      .env
    • 启用路径映射,根目录的绝对路径为
      var/www/html
  10. 在“PhpStorm -> 设置 -> PHP -> 服务器”中添加另一个服务器来拦截 Web 请求:

    • 名称:0.0.0.0
    • 主机:0.0.0.0
    • 端口:80
    • 启用路径映射,根目录的绝对路径为
      var/www/html
  11. 在“PhpStorm -> 设置 -> PHP -> 测试框架”中添加一个新的远程解释器,其作曲家自动加载路径为

    /var/www/html/vendor/autoload.php

  12. 应用所有更改,启用调试连接侦听器并开始调试

我已在 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

docker phpstorm xdebug wsl-2 laravel-sail
1个回答
0
投票

感谢 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 选项,因为自动发现也不起作用。

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