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

Docker Compose部署Django应用无法解析db数据库服务名报错如何解决

问题原因
  • depends_on仅控制容器启动顺序,不会等待PostgreSQL服务完成初始化、网络配置就绪再启动web容器,web启动时db服务还未接入网络,导致主机名解析失败
  • PyCharm运行Docker Compose时的配置问题:默认可能仅单独启动web容器,未将web容器加入db所在的网络,也未关联启动db服务
  • 自定义的badger-postgres镜像启动异常,db容器退出,导致网络中不存在db这个服务名
  • 旧版本Docker Compose会给自定义网络添加项目名前缀,导致服务名解析规则失效
解决步骤
  1. 先确认db容器运行状态
    执行命令docker compose ps查看db容器状态,如果为Exit状态,执行docker compose logs db查看镜像启动日志,排查是否存在数据库初始化失败、端口被占用等基础问题。
  2. 增加数据库启动等待逻辑
    修改docker-compose.yml中web服务的启动命令,等待db端口连通后再启动Django服务:
services:
  web:
    image: "badger-dev"
    ports:
      - "8000:8000"
    volumes:
      - .:/app
    depends_on:
      - db
    command: >
      sh -c "
      while ! nc -z db 5432;
      do
        sleep 1;
      done;
      python manage.py runserver 0.0.0.0:8000"

如果web镜像为Alpine基础镜像,将nc -z db 5432改为nc -w1 db 5432即可。
3. 修正PyCharm运行配置
打开PyCharm的运行/调试配置面板,找到对应的Docker Compose运行项:

  • 确认启动的服务列表中同时勾选了web和db,不要仅勾选web
  • 确认选项中没有开启「跳过启动关联服务」类配置
  • 不要直接在PyCharm本地终端执行Django启动命令,本地环境无法解析Docker内部的db服务名,必须通过Docker Compose启动完整服务栈
  1. 显式指定网络别名
    在db服务配置中添加网络别名,强制服务可以通过db域名访问:
db:
  image: "badger-postgres"
  container_name: db
  ports:
    - "5432:5432"
  networks:
    djangonetwork:
      aliases:
        - db
  1. 重建容器与网络
    执行命令清理旧的容器、网络资源后重新启动:
docker compose down -v
docker compose up --build

内容的提问来源于stack exchange,提问作者Antonio Gamiz Delgado

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:57:04