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

如何从Windows访问WSL2中运行的FastAPI本地服务?

解决WSL2中FastAPI无法被Windows浏览器访问的问题

核心原因

WSL2采用虚拟化网络栈,127.0.0.1仅指向WSL2内部的本地回环,Windows系统的localhost无法直接映射到这个地址,因此必须让FastAPI监听所有网卡,并使用WSL2的实际局域网IP访问。

具体解决步骤

1. 修改FastAPI启动代码,绑定到所有网卡

将启动代码中的host参数从"127.0.0.1"改为"0.0.0.0",让FastAPI监听WSL2的所有网络接口:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello World"}

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)  # 关键修改:host设为0.0.0.0

2. 获取WSL2的正确IP地址

执行以下命令获取WSL2在Windows局域网中的实际IP(最可靠的方式):

ip addr show eth0 | grep inet | awk '{print $2}' | cut -d/ -f1

或者更简洁的命令:

hostname -I | awk '{print $1}'

执行后会得到类似172.18.xx.xx的IP地址,这就是Windows访问WSL2服务的目标地址。

3. 在Windows浏览器访问服务与Swagger UI

  • 基础API测试:输入http://[WSL2_IP]:8000,确认接口正常响应
  • Swagger UI测试:输入http://[WSL2_IP]:8000/docs,直接打开交互式测试界面

4. 排查防火墙拦截问题(若上述步骤无效)

Windows防火墙可能拦截WSL2的端口请求,可按以下操作处理:

  • 打开Windows Defender防火墙的「高级设置」
  • 新建入站规则,允许TCP端口8000的连接(或直接允许uvicorn.exe的网络访问权限)
  • 可临时关闭防火墙进行测试(排查完成后建议恢复防火墙设置)

5. 可选:用自动端口转发简化访问(无需记IP)

WSL2默认支持自动端口转发,满足以下条件即可直接用Windows的localhost访问:

  • FastAPI必须绑定到0.0.0.0(而非127.0.0.1)
  • WSL2的自动端口转发功能处于默认开启状态
    此时直接在Windows浏览器输入http://localhost:8000和http://localhost:8000/docs即可访问服务。

内容的提问来源于stack exchange,提问作者Quốc Khánh Cao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:40:39