如何从WSL2的Docker容器中调用Windows上的FastAPI服务?
解决WSL2 Docker容器访问Windows主机FastAPI的问题
以下是几种可行的解决方案,按操作复杂度排序:
1. 使用WSL2专属的Windows主机IP
WSL2环境下,Windows主机的IP可通过WSL终端命令获取:
cat /etc/resolv.conf
输出内容里nameserver字段对应的IP,就是Windows主机在WSL2网络中的可访问地址。将Node API的请求目标改为该IP加FastAPI的服务端口,例如http://192.168.100.5:8000/api/your-endpoint。
注意:WSL2重启后该IP可能会变化,若需固定,可手动配置WSL2网络或给Windows设置静态IP。
2. 修改FastAPI的绑定地址
默认FastAPI仅绑定127.0.0.1,仅允许本地请求。要让外部(包括WSL2和Docker容器)访问,需将服务绑定到所有网卡:
- 启动命令修改为:
uvicorn main:app --host 0.0.0.0 --port 8000
- 或在代码中直接指定:
if __name__ == "__main__": uvicorn.run("main:app", host="0.0.0.0", port=8000)
3. 采用Docker Host网络模式(WSL2后端Docker适用)
如果你的Docker使用WSL2作为后端,启动Node容器时添加--network host参数,容器会直接复用WSL2的网络栈。此时容器内用localhost即可访问Windows上的FastAPI(需先完成步骤2的绑定配置)。示例启动命令:
docker run --network host -d your-node-api-image
注意:该模式下容器端口会直接占用WSL2的端口,需避免端口冲突。
4. 配置Windows防火墙规则
确保Windows防火墙允许FastAPI的服务端口接收WSL2网络的请求:
- 打开Windows Defender防火墙,点击「高级设置」
- 新建入站规则,选择「端口」类型,点击下一步
- 输入FastAPI的服务端口(如8000),选择TCP协议,点击下一步
- 选择「允许连接」,点击下一步
- 按需勾选「域」「专用」「公网」(建议至少勾选专用),点击下一步
- 命名规则后完成配置
内容的提问来源于stack exchange,提问作者Alberto lopez jimenez
相关产品推荐
相关产品推荐

