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
相关产品推荐
相关产品推荐

