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

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,在任务管理器中结束对应进程
  • 改用其他端口:继续使用1337这类非80端口,访问时用http://localhost:1337即可

3. 最终验证步骤

  1. 停止现有服务:docker-compose down
  2. 重新构建并启动:docker-compose up --build
  3. 测试访问:curl http://localhost:1337(对应你设置的端口)
  4. 额外验证:进入web容器确认服务正常:docker-compose exec web curl http://localhost:8000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:40:24