Xdebug 3.0 WSL2 和 VSCode - 地址已被 docker-proxy 使用
Xdebug 3.0 WSL2 and VSCode - address is already in use by docker-proxy
我在 WSL:Ubuntu 中的 VSCode 无法监听 xdebug 端口,因为它被一些 docker-proxy 阻止了。
我正在关注此 Solution,但尝试 VSCode 监听 xdebug 端口,导致以下错误:
Error: listen EADDRINUSE: address already in use :::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-撰写版本: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=..."
从 Dockerfile/docker-compose 中删除 Expose 指令,如此 comment 也不会删除错误。
解决了。对于有此挑战的其他人:
wsl-ubuntu 内部 -> docker-containter host.docker.internal
指向错误的 ip。
在 wsl-distribution 中,文件 /etc/resolv.conf
是 windows 主机的 ip。
要获得正确的 ip,请使用此答案:How to get the primary IP address of the local machine on Linux and OS X?
我的解决方案是用这个 ip 定义一个 env-variable:
alias docker_compose_local_ip="ifconfig eth0 | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*//p'"
export DOCKER_COMPOSE_LOCAL_IP=$(docker_compose_local_ip)
并用它配置容器:
services:
service-name:
environment:
- XDEBUG_CONFIG=client_host=${DOCKER_COMPOSE_LOCAL_IP} ...
我在 WSL:Ubuntu 中的 VSCode 无法监听 xdebug 端口,因为它被一些 docker-proxy 阻止了。
我正在关注此 Solution,但尝试 VSCode 监听 xdebug 端口,导致以下错误:
Error: listen EADDRINUSE: address already in use :::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-撰写版本: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=..."
从 Dockerfile/docker-compose 中删除 Expose 指令,如此 comment 也不会删除错误。
解决了。对于有此挑战的其他人:
wsl-ubuntu 内部 -> docker-containter host.docker.internal
指向错误的 ip。
在 wsl-distribution 中,文件 /etc/resolv.conf
是 windows 主机的 ip。
要获得正确的 ip,请使用此答案:How to get the primary IP address of the local machine on Linux and OS X?
我的解决方案是用这个 ip 定义一个 env-variable:
alias docker_compose_local_ip="ifconfig eth0 | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*//p'"
export DOCKER_COMPOSE_LOCAL_IP=$(docker_compose_local_ip)
并用它配置容器:
services:
service-name:
environment:
- XDEBUG_CONFIG=client_host=${DOCKER_COMPOSE_LOCAL_IP} ...