Lando启动失败:WSL2环境下代理端口绑定错误求助
问题背景
环境:Windows 11 + WSL2 Ubuntu 20 + 带WSL支持的Docker + Lando 3.11
启动Lando时出现端口绑定错误:
Cannot start service proxy: 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.
修改Lando全局config.yml的proxyHttpsPort无效,且Windows侧可访问localhost,但WSL内部curl localhost会被拒绝。
解决方案步骤
1. 彻底排查Windows侧端口占用
WSL2的端口依赖Windows系统转发,部分系统服务或隐藏进程可能悄悄占用443端口,用管理员权限打开CMD执行:
netstat -abno | findstr :443
- 找到对应PID的进程名,若为系统服务(如HTTP.sys、IIS、远程桌面相关服务),可临时停止该服务后重试启动Lando。
- 若未找到明确占用进程,继续下一步。
2. 调整Lando全局配置解决端口绑定
编辑Lando的全局配置文件(路径:~/.lando/config.yml),同时修改两个参数:
# 自定义HTTPS端口,避开443 proxyHttpsPort: 4443 # 绑定到所有网卡,而非仅127.0.0.1 proxyBindAddress: 0.0.0.0
保存后重启Lando服务:
lando rebuild -y
3. 解决WSL内部无法访问的问题
WSL2的localhost与Windows侧并非完全互通,可通过以下两种方式处理:
方式一:使用WSL内部IP访问
在WSL终端执行命令获取本机IP:
hostname -I
得到类似192.168.1.100的地址,用该地址替代localhost访问:
curl https://192.168.1.100:4443
方式二:配置端口转发与防火墙
- 在Windows管理员CMD中添加端口转发规则(替换
<WSL_IP>为上述获取的IP):
netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=4443 connectaddress=<WSL_IP> connectport=4443
- 在WSL中开放对应端口的防火墙规则:
sudo ufw allow 4443/tcp sudo ufw reload
4. 检查Docker WSL集成状态
打开Docker Desktop,进入Settings > Resources > WSL Integration,确保Ubuntu 20的集成开关处于开启状态,重启Docker后再启动Lando。
内容的提问来源于stack exchange,提问作者Funky Dude

