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测试本地访问:
若容器内访问也返回404,说明是应用本身问题(如路由未注册);若容器内正常,需排查端口映射或本地网络问题。docker exec -it <container_id> curl http://localhost:8000
内容的提问来源于stack exchange,提问作者Philippe Vallerand
相关产品推荐
相关产品推荐

