WSL2中DDev项目启动端口不可用且路由访问失败问题
解决WSL2环境下DDEV端口占用及路由访问失败问题
问题描述
启动WSL2中的DDEV项目时频繁报错:
Error response from daemon: Ports are not available: exposing port TCP 127.0.0.1:443 -> 0.0.0.0:0: listen tcp 127.0.0.1:443: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.
偶尔会报80端口占用,但启动前已确认WSL内部和Windows主机上这些端口均未被占用。可正常启动其他占用同端口的Docker容器,手动执行路由启动命令:
COMPOSE_PROJECT_NAME=ddev-project docker-compose -f /home/crs/.ddev/.router-compose-full.yaml -p ddev-router up -d
路由看似运行正常,但仍无法访问项目,ddev debug test执行失败。更新重装Docker Desktop和DDEV、修改router_http_port和router_https_port为其他端口后,项目启动成功,但仍无法通过DDEV路由访问,仅能绕过路由直接访问Web容器。
解决方案
1. 修复WSL2端口转发缓存冲突
WSL2的端口转发缓存可能出现异常,导致端口绑定失败:
- 关闭所有Docker容器和Docker Desktop
- 在Windows主机PowerShell中执行命令重启WSL2:
wsl --shutdown - 重新启动WSL2和Docker Desktop后,尝试启动DDEV项目
2. 重置DDEV路由配置
手动启动路由可能导致配置混乱,重置路由环境:
- 在WSL2中执行:
ddev poweroff ddev router stop - 删除残留的路由容器:
docker rm -f ddev-router - 重新启动DDEV项目:
ddev start
3. 排查Windows代理干扰
Windows代理软件可能阻断WSL2的端口转发:
- 关闭Windows主机上的代理工具(如Clash、Charles等)
- 在WSL2中清除代理环境变量:
unset http_proxy https_proxy ALL_PROXY - 重新启动DDEV项目
4. 调整DDEV路由绑定策略
修改DDEV配置,让路由绑定到全接口而非回环地址:
- 编辑项目的
.ddev/config.yaml,添加或修改:router_bind_all_interfaces: true - 保存后重启DDEV项目,路由会绑定到
0.0.0.0,避免回环地址的端口转发冲突
5. 修复DNS解析问题
无法通过路由访问可能是域名解析失败:
- 在Windows主机上ping项目域名(如
project-name.ddev.site),确认解析到WSL2的IP - 刷新Windows DNS缓存:
ipconfig /flushdns - 在WSL2中重启DNS服务:
sudo systemctl restart systemd-resolved
内容的提问来源于stack exchange,提问作者crsdahl
相关产品推荐
相关产品推荐

