XDeploy 3,Docker 下的 phpstorm 配置,安装了 WSL 2 Ubuntu 引擎,Windows 10 作为主机

xdebug 3, phpstorm configuration under docker installed with wsl 2 ubunto engine with windows 10 as host machine

提问人:Khaled Boussoffara 提问时间:7/4/2023 更新时间:9/17/2023 访问量:236

问:

我使用名为“micro-env”的程序在 wsl 2 上安装了一个 docker,

enter image description here

WSL2 固定 IP 为:

172.23.183.202

我想将 xdebug 3 添加到 phpstorm,xdebug 安装在 php 7 docker 容器中。

这是命令的输出:

docker inspect groomrhv2-php -f "{{json .NetworkSettings.Networks }}" --format json | jq . 

输出:

"NetworkSettings": {
      "Bridge": "",
      "SandboxID": "7293963ad4db7c70a3c7e4c24fb7c4e04c26cf4c2c2723a55272aeba90b8fd37",
      "HairpinMode": false,
      "LinkLocalIPv6Address": "",
      "LinkLocalIPv6PrefixLen": 0,
      "Ports": {
        "443/tcp": [
          {
            "HostIp": "0.0.0.0",
            "HostPort": "443"
          },
          {
            "HostIp": "::",
            "HostPort": "443"
          }
        ],
        "80/tcp": [
          {
            "HostIp": "0.0.0.0",
            "HostPort": "8080"
          },
          {
            "HostIp": "::",
            "HostPort": "8080"
          }
        ],
        "9000/tcp": null
      },
      "SandboxKey": "/var/run/docker/netns/7293963ad4db",
      "SecondaryIPAddresses": null,
      "SecondaryIPv6Addresses": null,
      "EndpointID": "",
      "Gateway": "",
      "GlobalIPv6Address": "",
      "GlobalIPv6PrefixLen": 0,
      "IPAddress": "",
      "IPPrefixLen": 0,
      "IPv6Gateway": "",
      "MacAddress": "",
      "Networks": {
        "groomrhv2_dockerized_default": {
          "IPAMConfig": null,
          "Links": null,
          "Aliases": [
            "groomrhv2-php",
            "groomrhv2-php",
            "c1aa5080ef3e"
          ],
          "NetworkID": "3fb9d9c63780fe121610305d6d164d70508c1ebb3c7de9267ddbba3feff39b58",
          "EndpointID": "e717eecc4374e4f025bf83b98945d87bd8e973ebd7a53d11538fa10bb460f064",
          "Gateway": "172.22.0.1",
          "IPAddress": "172.22.0.5",
          "IPPrefixLen": 16,
          "IPv6Gateway": "",
          "GlobalIPv6Address": "",
          "GlobalIPv6PrefixLen": 0,
          "MacAddress": "02:42:ac:16:00:05",
          "DriverOpts": null
        }
      }
    }
  }

然后在容器内:

docker exec -ti groomrhv2-php bash

php --ini 在容器内的输出:

Cannot load Xdebug - it was already loaded
Configuration File (php.ini) Path: /usr/local/etc/php
Loaded Configuration File:         (none)
Scan for additional .ini files in: /usr/local/etc/php/conf.d
Additional .ini files parsed:      /usr/local/etc/php/conf.d/docker-php-ext-config.ini,
/usr/local/etc/php/conf.d/docker-php-ext-gd.ini,
/usr/local/etc/php/conf.d/docker-php-ext-intl.ini,
/usr/local/etc/php/conf.d/docker-php-ext-opcache.ini,
/usr/local/etc/php/conf.d/docker-php-ext-pdo_pgsql.ini,
/usr/local/etc/php/conf.d/docker-php-ext-sodium.ini,
/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini,
/usr/local/etc/php/conf.d/error_reporting.ini,
/usr/local/etc/php/conf.d/opcache.ini,
/usr/local/etc/php/conf.d/xdebug.ini

XDeploy 扩展位于:/usr/local/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so

php.ini 位于:/usr/local/etc/php

在phpstorm中,我添加了docker:

enter image description here

然后我添加了PHP CLI解释器,如下所示:

enter image description here

这是我的xdebug.ini配置:

[xdebug]
zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so
xdebug.mode=debug,develop,profile
xdebug.discover_client_host=false
xdebug.client_host=172.23.183.202
xdebug.client_port=9000
xdebug.start_with_request=yes
xdebug.idekey=GroomRHV2
XDEBUG_SESSION=GroomRHV2
xdebug.cli_color=1
xdebug.log_level=3
xdebug.remote_autostart = 1
xdebug.remote_enable = 1

然后我尝试在Web服务器上验证调试器配置:

enter image description here

这就是我最终得到的:

enter image description here

我目前无法将 xdebug 3 与 phpstorm 一起使用,如果有人可以帮助我,我将不胜感激! 谢谢

php 调试 docker-compose xdebug

评论


答:

0赞 ivan rusin 9/17/2023 #1

就我而言,通过向 .env 文件添加一个选项(docker-compose 必须有)解决了同样的问题,或者您可以修复 xdebug.ini(如果可访问)

    XDEBUG_CONFIG='client_host=172.28.80.1 client_port=9003 start_with_request=yes idekey=PHPSTORM discover_client_host=0'

172.28.80.1 - 我的本地主机 pc IP(PhpStorm 在这里工作)

enter image description here

原来原因是PHP没有在安装了IDE的Windows计算机上敲门(172.28.80.1), 但在 WSL 虚拟机 (10.5.0.1) 的 IP 上 设置 discover_client_host=0 很重要,因为我们不需要在 10.5.0.1:9003 连接失败的情况下通过 xDebug 自动打开套接字。

您还可以在起始索引.php文件的顶部插入 xdebug_info() 函数,并查看 xdebug 实际尝试访问的位置:

<?php

xdebug_info();
die;

enter image description here

你可以观察你的本地主机上打开了哪些端口 netstat -na | find “9003” enter image description here

本地主机 IP 桅杆可以通过带有索引 .php 的 php 容器执行 ping 操作,通过 ping 检查它,或使用 telnet 检查

最后一个可选点,没有它,xDebug 将已经工作,但不会显示调试器停止在哪一行,是向风暴指示您的本地服务器和文件在真实磁盘上的位置及其在容器中的相应位置enter image description here