docker-compose环境下Django连接Postgres数据库报错问题求助
配置问题及修复方案
你遇到的连接报错主要是以下三个配置问题导致的:
- Postgres环境变量名错误
Postgres官方镜像的密码配置变量为POSTGRES_PASSWORD,你当前写的POSTGRES_PASS不符合镜像要求,会导致Postgres初始化异常,无法正常监听端口提供服务。 - Django数据库连接配置错误
检查你Django项目settings.py中的数据库配置项,必须符合以下要求:HOST字段填docker-compose中定义的db服务名db,不能填127.0.0.1或localhost,同网络下的容器通过服务名进行DNS解析互访PORT字段填Postgres默认端口5432USER、PASSWORD、NAME字段要和db服务的POSTGRES_USER、POSTGRES_PASSWORD、POSTGRES_DB取值对应,也就是分别为postgres、postgres、postgres
- 服务启动时序不匹配
depends_on仅能保证db容器先于Django容器启动,无法保证Postgres进程完全初始化完成,Postgres首次启动时会执行初始化逻辑,这段时间端口未开放,Django启动时尝试连接就会抛出连接拒绝错误。
修复步骤
- 修改docker-compose.yml中db服务的environment配置,将
POSTGRES_PASS改为POSTGRES_PASSWORD - 调整Django启动命令,增加等待逻辑避免时序问题,比如将django服务的command改为:
sh -c "sleep 15 && python manage.py runserver 0.0.0.0:8000" - 执行
docker-compose down -v删除已有的错误初始化数据卷,避免旧数据干扰 - 重新执行
docker-compose up --build启动服务即可
内容的提问来源于stack exchange,提问作者23rdpro
相关产品推荐
相关产品推荐

