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

Flask Docker容器HTTP请求返回404错误排查求助

Flask Docker部署404问题排查

问题现象

容器正常启动无报错,但浏览器访问http://localhost:8000返回404 Not Found;本地直接运行Flask应用完全正常,仅Docker部署时出现该问题。

相关代码与操作命令

Flask应用代码(flaskApp.py)

from flask import Flask, redirect, render_template, render_template_string, request, url_for
from api import fetch_inventory
app = Flask(__name__)

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8000, debug=True)

@app.route('/')
def home_page():
    return render_template('home/index.html')

Dockerfile

FROM python:3.9-slim
WORKDIR /app
COPY . /app
RUN pip install --no-cache-dir -r requirements.txt
EXPOSE 8000
CMD ["python", "flaskApp.py"]

操作命令

  • 镜像构建:docker build --no-cache -t <image name>
  • 容器启动:docker container run -d -p 8000:8000 <image name>

排查思路与解决方案

1. 修复路由定义顺序问题

你的Flask路由@app.route('/')定义在了if __name__ == "__main__":代码块之后,容器内执行python flaskApp.py时,__name__等于__main__,代码会先启动服务,后续路由装饰器完全没机会执行,导致根路由未注册。

调整后代码:

from flask import Flask, redirect, render_template, render_template_string, request, url_for
from api import fetch_inventory
app = Flask(__name__)

@app.route('/')
def home_page():
    return render_template('home/index.html')

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8000, debug=True)

2. 验证模板文件是否存在于容器内

确保templates/home/index.html被正确复制到容器中:

  • 检查项目根目录是否存在.dockerignore文件,若其中包含templates规则,需移除;
  • 进入容器验证文件路径:
    docker exec -it <container_id> bash
    ls /app/templates/home/
    
    若文件缺失,修正COPY逻辑或.dockerignore规则。

3. 确认容器内服务状态

  • 查看容器日志,确认Flask服务正常启动:
    docker logs <container_id>
    
    正常日志应包含Running on http://0.0.0.0:8000的输出;
  • 在容器内用curl测试本地访问:
    docker exec -it <container_id> curl http://localhost:8000
    
    若容器内访问也返回404,说明是应用本身问题(如路由未注册);若容器内正常,需排查端口映射或本地网络问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 00:07:06