【发布时间】:2022-07-12 00:00:58
【问题描述】:
我在 WSL 中的 VSCode:Ubuntu 无法监听 xdebug 端口,因为它被某些 docker-proxy 阻止了。
我在关注这个Solution,但是尝试 VSCode 监听 xdebug 端口,导致以下错误:
错误:监听 EADDRINUSE:地址已在使用 :::9003
谁能帮助将 VSCode 连接到 xdebug?
Windows 11 表示该端口已由 wslhost 分配:
PS C:\WINDOWS\system32> Get-Process -Id (Get-NetTCPConnection -LocalPort 9003).OwningProcess
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
285 47 2288 4748 0,05 19480 1 wslhost
Ubuntu 告诉它,它是由一些 docker-proxy 分配的:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:9003 0.0.0.0:* LISTEN 17210/docker-proxy
tcp6 0 0 :::9003 :::* LISTEN 17217/docker-proxy
docker-compose-version: docker-compose version 1.25.0
xdebug.log 说:
[Step Debug] INFO: Connecting to configured address/port: host.docker.internal:9003.
[Step Debug] ERR: Time-out connecting to debugging client, waited: 200 ms. Tried: host.docker.internal:9003 (through xdebug.client_host/xdebug.client_port) :-(
只要没有人在听就可以肯定。
至于xdebug.client_host 我试过了:
- host.docker.internal
- xdebug://gateway 和 xdebug://nameserver 指的是:https://docs.google.com/document/d/1W-NzNtExf5C4eOu3rRQm1WlWnbW44u3ANDDA49d3FD4/edit?pli=1
- 使用 docker-compose.yml 设置环境变量:
XDEBUG_CONFIG="client_host=..."
像 comment 中那样从 Dockerfile/docker-compose 中删除 Expose 指令也不会删除错误。
【问题讨论】:
-
xdebug://gateway和xdebug://nameserver还没有发布版本,所以它们不能工作:-) -
1) 重新启动 PC,可能会有所帮助 2) 仔细检查任何活动/正在运行的 Docker 映像都没有任何服务使用或公开的 9003 端口。 3) 当你运行零个 Docker 镜像时,一个接一个地关闭镜像——它还在吗? 4) 关闭 Docker——它还在吗? 4) 在 php.ini 和 VSCode ofc 中使用另一个 Xdebug 端口(例如 9004 或其他数字)。
-
感谢您的帮助。我删除了 9003 的所有暴露,并且 php-fpm-container 是唯一具有端口绑定
9003:9003的容器。如果我从 docker-compose.yml 中删除它,则端口可以免费收听。但是,即使我使用 ubuntu 的 /etc/resolv.conf 中的 ip 配置 xdebug.client_host,VSCode 仍然没有捕获调试会话。
标签: docker visual-studio-code windows-subsystem-for-linux xdebug wsl-2