如何从局域网设备访问Windows WSL2后端的Docker化Flask API
解决WSL2后端Docker中Flask API局域网访问问题
以下是针对你的场景的具体解决方向:
1. 确保Flask服务绑定到所有接口
容器内运行的Flask服务默认只会监听127.0.0.1,仅允许容器内部访问。必须修改启动代码,让服务监听容器的所有网络接口:
# 在stt_api.py中确保启动代码如下 if __name__ == '__main__': app.run(host='0.0.0.0', port=5001)
这是容器内服务对外提供访问的基础前提。
2. 验证并修复WSL2端口转发
WSL2虚拟机与Windows主机是独立的网络环境,Docker的端口映射实际是先映射到WSL2,再转发到Windows主机。你需要确认端口转发规则是否存在:
- 在Windows PowerShell中执行:
netsh interface portproxy show all - 检查是否存在
0.0.0.0:5001指向你的WSL2 IP(172.27.145.194)的转发规则。如果没有,手动添加:
注意:WSL2的IP可能重启后变化,若后续再次出现问题,需重新检查并更新转发规则。netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=5001 connectaddress=172.27.145.194 connectport=5001
3. 配置Windows防火墙允许端口访问
Windows防火墙默认会阻止局域网设备访问主机的非默认端口,需添加入站规则:
- 打开「控制面板」→「Windows Defender防火墙」→「高级设置」
- 右键「入站规则」→「新建规则」
- 选择「端口」→ 勾选「TCP」,输入
5001 - 选择「允许连接」,勾选适用的网络环境(一般选「域」「专用」「公网」)
- 命名规则后完成创建
4. 确认Docker Desktop的WSL集成设置
确保Docker Desktop已正确集成你的WSL2发行版:
- 打开Docker Desktop设置,进入「Resources」→「WSL Integration」
- 找到你的Ubuntu发行版,勾选启用集成选项,点击「Apply & Restart」
5. 可选:使用WSL2的host网络模式
若上述步骤仍有问题,可尝试让容器直接使用WSL2的网络(仅限WSL2环境内运行Docker):
修改docker-compose.yml,添加network_mode: host:
tfmodelserving: build: ./tfserving/docker-image container_name: tfserving network_mode: host volumes: - ./tfserving/drive/src:/src
此模式下无需配置端口映射(容器直接使用WSL2的5001端口),但需在WSL2的Ubuntu终端中执行docker-compose up,而非Windows终端。
内容的提问来源于stack exchange,提问作者LewT
相关产品推荐
相关产品推荐

