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

请求无法接入Docker容器中的Flask应用问题排查

解决Docker部署Flask+Gunicorn时的连接重置问题

我来帮你搞定这个问题!你遇到的curl: (56) Recv failure: Connection reset by peer错误,核心原因是Gunicorn默认只监听容器内部的127.0.0.1回环地址,宿主机通过端口映射发过来的请求根本无法被容器内的服务接收。

快速修复方案

只需要修改Gunicorn的启动参数,让它监听容器的所有网卡(0.0.0.0),有两种简单的修改方式:

方式1:修改Dockerfile的CMD指令

直接把Dockerfile里的CMD行改成下面这样,明确指定绑定地址为0.0.0.0:8000:

CMD ["gunicorn", "hello:app", "--bind", "0.0.0.0:8000", "--log-file=-"]

方式2:兼容本地与容器的启动方式

如果你想让本地和容器运行的逻辑更统一,也可以保留原有Dockerfile,在启动容器时通过命令行覆盖默认CMD:

docker run -it --rm --name flaskdemoapp -p 8000:8000 flaskdemo gunicorn hello:app --bind 0.0.0.0:8000 --log-file=-

不过更推荐第一种方式,因为Dockerfile里明确配置绑定地址,能避免后续启动时遗漏参数。

验证修复效果

  1. 重新执行你的shell脚本构建并运行容器:
./run.sh
  1. 这次容器启动日志会显示Gunicorn监听http://0.0.0.0:8000,此时再执行curl localhost:8000,就能正常收到Hello, World!的响应了。

为什么本地运行没问题?

本地执行gunicorn hello:app时,Gunicorn监听的127.0.0.1是宿主机的回环地址,所以你在宿主机上访问localhost:8000能正常连接。但在Docker容器里,127.0.0.1是容器自己的内部回环,宿主机无法直接访问这个地址——只有当服务监听0.0.0.0(容器的所有网卡)时,宿主机的端口映射请求才能被正确转发到服务上。

内容的提问来源于stack exchange,提问作者Patrick Bucher

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:17:30