WSL2下Docker部署Flask应用访问localhost:5000报ERR_EMPTY_RESPONSE
问题解决方法
核心原因
你当前配置的核心问题是gunicorn的绑定地址配置错误:Docker容器拥有独立的网络命名空间,你在CMD中将gunicorn绑定到了localhost:5000,这个地址仅允许容器内部的环回访问,外部的WSL2宿主机、Windows系统都无法连通容器内的服务。
你直接在WSL2内启动gunicorn可正常访问,是因为此时服务绑定的是WSL2的本地环回地址,Windows和WSL2默认做了localhost的打通,所以可以正常访问。
修复步骤
1. 修改Dockerfile启动参数
将gunicorn的绑定地址改为0.0.0.0:5000,监听容器内所有网卡的请求,修改后的CMD指令如下:
CMD [ "gunicorn", "-w", "4", "-b","0.0.0.0:5000","--reload","app:create_app('development')" ]
2. 重新构建镜像并启动容器
注意你原有的docker build命令缺失了末尾的上下文路径.,补全后执行以下命令:
# 重新构建镜像 docker build -t "backend" . # 启动容器 docker run -p 5000:5000 backend
3. 异常排查(修改后仍无法访问时执行)
如果修改绑定地址后还是返回ERR_EMPTY_RESPONSE,按以下步骤排查:
- 先在WSL2终端执行
curl localhost:5000,如果能正常拿到返回,说明是Windows侧的问题:检查Windows防火墙是否开放了5000端口的入站规则,也可以直接用WSL2的内网IP+5000端口访问(WSL2内执行ip addr show eth0即可查到对应IP) - 如果你使用Docker Desktop运行容器,确认设置中已经开启了对应WSL2发行版的Docker集成开关
内容的提问来源于stack exchange,提问作者Imran Said
相关产品推荐
相关产品推荐

