我的VSCode在WSL中:Ubuntu无法监听xdebug端口,因为它被一些docker-proxy阻止了。
我遵循这个解决方案,但尝试VSCode听xdebug端口,导致以下错误:
错误:listen EADDRINUSE:地址已在使用:::9003
谁能帮助连接VSCode到xdebug?
Windows 11显示端口已经被wslhost分配:
PS C:WINDOWSsystem32> 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- composition -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://网关和xdebug://命名服务器参考:https://docs.google.com/document/d/1W-NzNtExf5C4eOu3rRQm1WlWnbW44u3ANDDA49d3FD4/edit?pli=1
- 用docker-compose设置env变量。yml:
XDEBUG_CONFIG="client_host=..."
从Dockerfile/docker-compose中删除暴露指令也不会消除错误。
解决了。对于有此挑战的其他人:
web -ubuntu ->docker- containerhost.docker.internal
指向错误的ip。在wsdl -发行版中,文件/etc/resolv.conf
是windows主机的ip。要获得正确的ip地址,请使用以下答案:如何在Linux和OS X上获得本地机器的主ip地址?
我的解决方案是用这个ip定义一个环境变量:
alias docker_compose_local_ip="ifconfig eth0 | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*.){3}[0-9]*).*/2/p'"
export DOCKER_COMPOSE_LOCAL_IP=$(docker_compose_local_ip)
并使用它配置容器:
services:
service-name:
environment:
- XDEBUG_CONFIG=client_host=${DOCKER_COMPOSE_LOCAL_IP} ...