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

Docker部署Flask项目访问127.0.0.1:8000被拒 非Docker环境运行正常

问题原因

核心问题是容器内的Flask服务仅绑定了容器自身的回环地址127.0.0.1,未监听可被外部访问的网卡地址,即便端口映射配置正确,宿主机流量也无法转发到容器内的服务。
具体触发逻辑有两点:

  • test_flask.py中硬编码了启动配置app.run(host="127.0.0.1", port=8000, debug=True),Dockerfile的CMD里传入的--host 0.0.0.0参数完全无效:直接执行Python脚本启动Flask时,不会解析这类命令行参数,只有调用flask run命令启动时才会读取对应参数。
  • 容器的网络栈和宿主机完全隔离,容器内的127.0.0.1仅对容器内部进程生效,宿主机和其他外部地址都无法访问绑定在这个地址上的服务,这也是本地直接运行脚本正常、容器内运行就拒连的核心差异。
修复步骤
  • 第一步:修改test_flask.py的启动配置,将绑定地址改为允许所有IP访问的0.0.0.0,修改后的代码块如下:
if __name__ == "__main__":
    # 注意host改成0.0.0.0,生产环境建议关闭debug模式
    app.run(host="0.0.0.0", port=8000, debug=False)
  • 第二步:修正Dockerfile中的CMD命令,删除无效的多余参数,修改为:
CMD [ "python", "test_flask.py" ]

补充说明:如果偏好使用flask run命令启动,需要先在Dockerfile中添加环境变量ENV FLASK_APP=test_flask.py,再将CMD改为CMD ["flask", "run", "--host", "0.0.0.0", "--port", "8000"],两种启动方式二选一即可,不要混合传参。

  • 第三步:重新构建镜像并启动服务,执行以下命令:
docker-compose down
docker-compose build --no-cache
docker-compose up -d
验证结果

服务启动后查看容器日志,出现* Running on http://0.0.0.0:8000的提示时,在宿主机访问127.0.0.1:8000即可正常看到首页返回内容。
注意:Flask debug模式自带的热重载功能在容器环境中容易出现子进程监听异常的问题,如果修改配置后仍偶发连接失败,先关闭debug模式再排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 03:39:30