You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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访问)

临时配置(重启后失效)

  1. 打开管理员权限的Windows PowerShell
  2. 执行端口转发命令,替换<WSL2_IP>为你获取到的WSL2虚拟IP:
    netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=9111 connectaddress=<WSL2_IP> connectport=9111
    
  3. 在WSL2终端中放行端口的防火墙规则:
    sudo iptables -A INPUT -p tcp --dport 9111 -j ACCEPT
    

自动配置(解决WSL2重启IP变化问题)

编写Windows脚本实现开机自动更新转发规则:

  1. 创建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
    
  2. 将该脚本设置为Windows开机启动,确保每次WSL2重启后自动更新转发规则。

方法3:使用WSL2的主机名访问

  • 在WSL2终端执行hostname获取主机名
  • 在Windows命令行中直接用该主机名加端口访问,例如:
    grpcurl -plaintext my-wsl-hostname:9111 list
    

Windows会自动解析WSL2主机名到对应的虚拟IP。


内容的提问来源于stack exchange,提问作者Andrey Dobrikov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 09:12:52