Docker部署Flask应用访问80端口仅显示Nginx默认页面如何解决?
问题根因定位
你访问到Nginx默认页说明Nginx服务启动正常,但Nginx没有加载正确的转发规则把请求转给uWSGI,基本是配置路径错误导致的,排查和修复步骤如下:
具体排查修复步骤
- 确认Nginx配置加载是否正确
首先进入运行中的容器查看Nginx实际加载的完整配置:
docker exec -it minex_container nginx -T
如果输出的配置里没有把请求转发到/tmp/uwsgi.socket的规则,说明你的自定义配置没有生效。
- 修复Nginx配置路径问题
你当前在Dockerfile中直接把nginx.conf复制到/etc/nginx,但Debian系的Nginx默认会优先加载/etc/nginx/sites-enabled/default里的默认站点配置,所以才会返回默认页。修改Dockerfile,添加删除默认配置、把自定义站点配置放到正确路径的逻辑:
# 原有COPY nginx.conf的行修改为,假设你的nginx.conf是站点配置不是主配置 COPY nginx.conf /etc/nginx/sites-available/minex_app RUN rm /etc/nginx/sites-enabled/default \ && ln -s /etc/nginx/sites-available/minex_app /etc/nginx/sites-enabled/
- 确认Nginx配置内容正确
你的nginx.conf需要包含如下核心转发规则,确保请求能正确转给uWSGI:
server { listen 80 default_server; listen [::]:80 default_server; server_name _; location / { include uwsgi_params; uwsgi_pass unix:/tmp/uwsgi.socket; } }
- 确认uWSGI配置正确
检查你的uwsgi.ini是否包含如下配置,确保能正确加载Flask应用、socket权限正常:
[uwsgi] module = app:app master = true processes = 5 socket = /tmp/uwsgi.socket chmod-socket = 666 vacuum = true die-on-term = true
这里module = app:app对应你app.py里的Flask实例名,如果你定义的实例名不是app需要对应修改。
验证修复
修改配置后重新构建镜像启动容器即可正常访问应用。
内容的提问来源于stack exchange,提问作者Lukas D. Sauer
相关产品推荐
相关产品推荐

