相同Docker配置部署AWS新实例出现Nginx 404 Not Found问题求助
排查步骤
- 首先确认返回404的确实是你部署的Nginx服务:在新实例本地执行
curl http://127.0.0.1,看返回头的Server字段是否为nginx,排除AWS安全组、负载均衡等上层设备返回404的可能。 - 检查所有容器运行状态
执行docker ps -a确认flask、mongodb、webserver三个容器均为Up正常运行状态,若有容器异常退出,执行docker logs 容器名查看报错日志定位启动失败原因。 - 验证Flask服务可用性
进入webserver容器测试上游Flask服务连通性:
若该请求也返回404,说明问题出在Flask服务本身,和Nginx无关:docker exec -it webserver curl http://flask:5000- 执行
docker exec -it flask flask routes查看Flask加载的路由是否符合预期 - 检查新实例的flask_application目录下是否存在
wsgi.py文件,路径是否和Dockerfile中配置的ENV FLASK_APP /var/www/wsgi.py匹配 - 查看Flask容器日志
docker logs flask确认是否存在MongoDB连接失败、依赖缺失等启动异常
- 执行
- 排查Nginx配置问题
- 执行
docker exec webserver nginx -t验证Nginx配置语法是否正确 - 执行
docker exec webserver nginx -T导出Nginx实际加载的全量配置,确认你的app.conf被正常加载,无其他默认配置覆盖server规则 - 查看Nginx日志
docker logs webserver根据报错定位问题:- 出现
no live upstreams报错:说明Nginx无法连通Flask服务,检查两个容器是否均加入frontend网络、Flask服务是否正常监听5000端口 - 出现文件不存在报错:确认是否缺失静态资源路径配置,可导出原有实例上的Nginx运行配置
docker exec 原有实例webserver容器名 nginx -T,和新实例配置做对比,确认是否有首次部署时手动修改的配置未同步到代码库
- 出现
- 执行
- 其他高频踩坑点
- 确认新实例的代码目录结构和原有实例完全一致,无文件缺失、路径大小写不匹配问题
- 执行
docker-compose build --no-cache强制无缓存重新构建镜像,避免镜像缓存导致的文件缺失问题 - 你的docker-compose中Flask服务挂载了
.:/src,如果代码逻辑中存在读取/src目录文件的操作,需确认新实例当前目录下存在对应文件
内容的提问来源于stack exchange,提问作者Tanabodin Kamol
相关产品推荐
相关产品推荐

