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

执行docker-compose up出现django no port[s] to connect to错误如何解决?

问题排查解决方案

1. 核心问题:服务启动顺序不同步

Docker Compose的depends_on仅保证容器启动顺序,不等待容器内服务完全就绪。你当前配置中,Django容器启动后需要先执行entrypoint.sh内的PostgreSQL等待、静态资源收集、数据库迁移、超级用户创建等操作,全部执行完成后才会启动gunicorn监听8000端口。但React和Nginx会在Django容器刚启动时就开始启动,此时Django端口未开放,就会抛出连接失败错误。
修复方案:给Django服务添加健康检查,等待端口就绪后再启动下游服务,修改docker-compose.yml的django配置块:

django:
  build:
    context: ./backend
    dockerfile: Dockerfile
  volumes:
    - django_static_volume:/usr/src/app/static
  expose:
    - 8000
  env_file:
    - ./backend/.env
  command: gunicorn candle.wsgi:application --bind 0.0.0.0:8000
  depends_on:
    - db
  # 新增健康检查
  healthcheck:
    test: ["CMD", "nc", "-z", "localhost", "8000"]
    interval: 2s
    timeout: 5s
    retries: 30

再修改react服务的depends_on配置:

react:
  # 其他配置不变
  depends_on:
    django:
      condition: service_healthy

2. 检查Django配置项

  • 确认settings.py中的ALLOWED_HOSTS包含django(Docker Compose内部服务域名),测试阶段可先设置为ALLOWED_HOSTS = ["*"]验证问题
  • 确认gunicorn启动命令中的wsgi路径正确:你的命令为gunicorn candle.wsgi:application,需确认Django项目根目录下存在candle/wsgi.py文件,路径错误会导致gunicorn启动失败,端口无法监听

3. 检查entrypoint.sh执行异常

单独启动Django容器查看运行日志,排查执行过程中是否报错:

docker-compose up django

常见错误点:

  • 数据库环境变量配置错误,导致PostgreSQL连接超时,entrypoint.sh卡在等待数据库的步骤
  • 超级用户创建逻辑报错(比如环境变量缺失、用户名格式不符合要求),导致脚本终止,无法执行后续的gunicorn启动命令

4. 前端Dockerfile缺失多阶段构建声明

你贴出的前端Dockerfile没有声明构建阶段,开头缺失基础镜像和builder别名声明,会导致前端构建失败,最终报错可能被误判为Django连接异常,补充开头配置:

# 补充开头的构建阶段声明
FROM node:16-alpine as builder
WORKDIR /usr/src/app
# 后面是你原有的COPY、RUN等逻辑
COPY ./react_app/package.json .
RUN apk add --no-cache --virtual .gyp \
        python \
        make \
        g++ \
    && npm install \
    && apk del .gyp

COPY ./react_app .

ARG API_SERVER
ENV REACT_APP_API_SERVER=${API_SERVER}
RUN REACT_APP_API_SERVER=${API_SERVER} \
  npm run build

WORKDIR /usr/src/app
RUN npm install -g serve
COPY --from=builder /usr/src/app/build ./build

5. 端口监听验证

Django容器启动后,执行以下命令进入容器,确认8000端口是否正常监听:

docker exec -it <你的Django容器名> bash
ss -tulpn | grep 8000

如果没有输出,说明gunicorn未正常启动,查看gunicorn运行日志定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:42:02