运行docker-compose启动Postgres时出现用户密码认证失败问题
PostgreSQL密码认证失败问题排查与解决
我之前也碰到过一模一样的情况——当执行docker-compose -f production.yml up启动服务时,直接弹出了PostgreSQL的密码认证失败错误,连带着Django一直在原地等待PostgreSQL可用。先给你看看当时的错误日志:
postgres_1 | Connection matched pg_hba.conf line 95: "host all all all md5" django_1 | PostgreSQL is unavailable (sleeping)... postgres_1 | 2018-03-21 07:48:35.575 UTC [120] FATAL: password authentication failed for user "DbUsErName" postgres_1 | 2018-03-21 07:48:35.575 UTC [120] DETAIL: Password does not match for user "DbUsErName"
这个问题核心其实很明确:Django服务使用的数据库密码和PostgreSQL中DbUsErName用户的密码不匹配。既然你的PostgreSQL配置存在.envs/.production/.postgres文件里,咱们就从这里一步步解决:
- 首先打开
.envs/.production/.postgres文件,重点核对两个关键配置项:POSTGRES_USER:确认这个值就是DbUsErName(PostgreSQL用户名大小写敏感,别写错字符)POSTGRES_PASSWORD:这个就是DbUsErName的登录密码,必须和Django那边的数据库密码完全一致——不管是Django配置文件里的DATABASES设置,还是对应环境变量(比如.envs/.production/.django里的DB_PASSWORD或者DATABASE_URL中的密码部分),都要一模一样,不能有多余空格、换行,大小写也得完全对应。
- 如果发现两边密码不匹配,修改对应的环境变量文件,把密码统一成同一个值。
- 修改完成后,先执行
docker-compose -f production.yml down停掉所有服务,再重新执行docker-compose -f production.yml up启动。 - 要是改完密码还是报错,那大概率是旧的PostgreSQL数据卷已经保留了初始的密码配置,这时候需要清理旧数据卷:执行
docker-compose -f production.yml down -v(这个命令会删除所有相关容器和数据卷),之后再重新启动服务,PostgreSQL就会用新密码重新初始化用户了。
内容的提问来源于stack exchange,提问作者Jay Jung
相关产品推荐
相关产品推荐

