Docker Compose部署FastAPI+Gunicorn+Nginx故障排查求助
问题分析与解决方案
核心问题拆解
你遇到两个关键问题:Nginx显示默认页面未转发请求,以及80端口绑定失败。以下是针对性的解决步骤:
1. Nginx显示默认页面的问题(核心原因:自定义配置未加载)
出现默认页面说明Nginx没有加载你的反向代理配置,而是使用了默认配置文件。解决要点如下:
修复Nginx的Dockerfile
你的./nginx/Dockerfile.prod必须确保将自定义配置替换掉Nginx的默认配置。示例Dockerfile内容:
FROM nginx:stable-alpine # 删除Nginx默认配置文件 RUN rm /etc/nginx/conf.d/default.conf # 将你的自定义配置复制到Nginx的配置目录 COPY nginx.conf /etc/nginx/conf.d/
注意:将
nginx.conf替换为你实际的Nginx配置文件名,确保该文件存放在./nginx目录下。
验证Nginx配置语法
启动容器后,进入Nginx容器检查配置是否合法:
docker-compose exec nginx nginx -t
如果输出test is successful说明配置正常;若有错误,根据提示修正配置文件。
端口映射匹配
如果你修改了Nginx内部监听端口(比如改成8080),需要同步修改docker-compose.yml中Nginx的ports配置,例如:
ports: - 1337:8080
此时访问地址应为http://localhost:1337。
2. 80端口绑定失败问题
报错address already in use是因为宿主机的80端口已被其他进程占用,解决方式:
- 查看占用进程:
- Linux/macOS:执行
lsof -i :80找到占用端口的进程PID,再用kill <PID>终止进程 - Windows:执行
netstat -ano | findstr ":80"找到PID,在任务管理器中结束对应进程
- Linux/macOS:执行
- 改用其他端口:继续使用1337这类非80端口,访问时用
http://localhost:1337即可
3. 最终验证步骤
- 停止现有服务:
docker-compose down - 重新构建并启动:
docker-compose up --build - 测试访问:
curl http://localhost:1337(对应你设置的端口) - 额外验证:进入web容器确认服务正常:
docker-compose exec web curl http://localhost:8000
内容的提问来源于stack exchange,提问作者Escachator
相关产品推荐
相关产品推荐

