WSL Ubuntu容器调用Windows宿主Node.js服务失败求助
解决容器无法访问Windows宿主Node.js AGI服务的问题
核心问题点
你的Node.js服务监听localhost:3000,仅允许Windows本地进程访问;WSL和容器属于外部网络环境,无法直接通过localhost或默认的host.docker.internal映射访问;同时WSL2的NAT网络特性可能导致网关地址无法正确指向Windows宿主。
具体解决步骤
1. 修改Node.js服务监听范围
将服务监听地址从localhost改为0.0.0.0,允许所有网络接口访问:
// 原代码示例 app.listen(3000); // 修改后 app.listen(3000, '0.0.0.0');
修改后服务会监听所有可用网络接口,包括WSL和容器能触达的地址。
2. 获取Windows宿主的实际IP
在Windows命令提示符执行:
ipconfig
找到以太网适配器 vEthernet (WSL)对应的IPv4地址(比如192.168.1.100),记录该地址。
3. 容器内直接使用Windows IP调用服务
将AGI调用地址改为agi://[Windows_IP]:3000,例如agi://192.168.1.100:3000。
4. 配置Windows防火墙放行端口
- 打开「Windows Defender 防火墙」→「高级设置」
- 新建入站规则:选择「端口」,输入
3000,允许连接,应用到所有网络类型。
5. 先验证WSL内的访问性
在WSL的Ubuntu环境中测试能否访问Windows服务:
curl http://[Windows_IP]:3000
如果能正常返回内容,再测试容器内的访问,排除WSL层面的网络障碍。
内容的提问来源于stack exchange,提问作者Code Guru
相关产品推荐
相关产品推荐

