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

Docker部署Django切换PostgreSQL时出现主机名解析错误

解决Django + Docker PostgreSQL的主机名解析错误

出现django.db.utils.OperationalError: could not translate host name "db" to address: Temporary failure in name resolution通常是容器网络、数据库配置或启动顺序问题导致的,以下是具体解决步骤:

1. 确认Django数据库配置正确

在settings.py中确保数据库配置的HOST值为db(对应docker-compose.yml里db服务的名称),其他参数匹配PostgreSQL默认设置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',
        'USER': 'postgres',
        'PASSWORD': 'postgres',
        'HOST': 'db',
        'PORT': 5432,
    }
}

2. 给PostgreSQL容器显式设置环境变量

修改docker-compose.yml中的db服务,添加环境变量确保认证逻辑正常(虽默认值一致,但显式设置可避免潜在问题):

services:
  web:
    # 保留原有配置
  db:
    image: postgres
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=postgres

3. 解决容器启动顺序问题

depends_on仅保证db容器先启动,但PostgreSQL服务可能还未完全就绪。可以在web服务的启动命令中添加延迟,确保数据库服务就绪后再启动Django:

services:
  web:
    build: .
    command: >
      sh -c "sleep 10 && python /code/manage.py runserver 0.0.0.0:8000"
    # 保留原有volumes、ports、depends_on配置

4. 重置Docker容器和网络

如果以上步骤无效,尝试清理旧容器和网络后重新构建:

# 停止并删除容器、网络
docker-compose down
# 可选:删除PostgreSQL数据卷(会清空数据库,谨慎操作)
docker-compose down -v
# 重新构建并启动服务
docker-compose up --build

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:36:23