WSL2 Docker中运行仅监听localhost的gRPC Python服务,Windows无法访问
解决方案
方法1:直接使用WSL2的IP地址访问
- 在WSL2终端执行
hostname -I,获取WSL2的虚拟IP(通常是172.16.x.x或192.168.x.x段) - 在Windows命令行/客户端中,用该IP替代localhost调用gRPC接口,例如:
# 示例:用grpcurl测试接口 grpcurl -plaintext 172.18.123.45:9111 list
方法2:配置Windows到WSL2的端口转发(实现Windows localhost访问)
临时配置(重启后失效)
- 打开管理员权限的Windows PowerShell
- 执行端口转发命令,替换
<WSL2_IP>为你获取到的WSL2虚拟IP:netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=9111 connectaddress=<WSL2_IP> connectport=9111 - 在WSL2终端中放行端口的防火墙规则:
sudo iptables -A INPUT -p tcp --dport 9111 -j ACCEPT
自动配置(解决WSL2重启IP变化问题)
编写Windows脚本实现开机自动更新转发规则:
- 创建
wsl-port-forward.ps1文件,内容如下:# 获取WSL2的IP $wslIp = wsl hostname -I | ForEach-Object { $_.Trim() } # 删除旧的转发规则 netsh interface portproxy delete v4tov4 listenaddress=127.0.0.1 listenport=9111 # 添加新的转发规则 netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=9111 connectaddress=$wslIp connectport=9111 - 将该脚本设置为Windows开机启动,确保每次WSL2重启后自动更新转发规则。
方法3:使用WSL2的主机名访问
- 在WSL2终端执行
hostname获取主机名 - 在Windows命令行中直接用该主机名加端口访问,例如:
grpcurl -plaintext my-wsl-hostname:9111 list
Windows会自动解析WSL2主机名到对应的虚拟IP。
内容的提问来源于stack exchange,提问作者Andrey Dobrikov
相关产品推荐
相关产品推荐

