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

Docker Compose部署Django Q报db主机名解析失败错误求助

问题原因

报错核心是Docker Compose内部DNS解析失败,直接诱因有两个:

  • 你的django-q服务配置中,depends_on字段仅声明了对redis的依赖,完全缺失db服务依赖项。Docker Compose默认会并行启动无依赖关系的服务,django-q启动时db容器还未完成初始化,没有在Compose内置DNS服务中注册db对应的域名记录,自然无法解析主机名。
  • 你当前配置里的depends_on仅控制容器启动顺序,不会校验被依赖服务是否真正可用,就算补全依赖,数据库初始化慢的时候仍可能出现连接异常。

对比你的web服务就可以验证:web服务的depends_on包含db,Compose会优先启动db再拉起web,因此web服务不会触发同类解析错误。

修复步骤

1. 补全django-q服务的依赖配置

修改docker-compose.yml中django-q服务的depends_on段,新增db依赖:

django-q:
    build: .
    command: python manage.py qcluster
    volumes:
      - .:/ps_survey
    env_file:
      - ./.env.prod
    depends_on:
      - redis
      - db # 新增该行

2. (可选但推荐)添加服务健康检查,避免时序问题

仅补全依赖只能解决DNS解析问题,无法覆盖PostgreSQL启动慢、初始化未完成导致的连接失败。建议给db服务添加健康检查,让依赖服务等数据库完全就绪后再启动:
首先修改db服务配置,新增健康检查规则:

db:
    image: postgres:12.8-alpine
    restart: always
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    env_file:
      - ./.env.prod.db
    ports:
      - 5400:5432
    healthcheck: # 新增段
      test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
      interval: 5s
      timeout: 5s
      retries: 5

然后将web和django-q的依赖规则改为等待服务健康:

# web服务depends_on修改示例
    depends_on:
      redis:
        condition: service_started
      db:
        condition: service_healthy

# django-q服务depends_on修改示例
    depends_on:
      redis:
        condition: service_started
      db:
        condition: service_healthy

3. 重启服务生效

执行以下命令重建并启动所有服务:

docker compose down
docker compose up -d --build

启动后执行docker compose logs django-q查看日志,确认无域名解析报错即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 04:51:22