Docker运行PostgreSQL与Hasura报postgres用户密码不匹配错误
问题根因
报错核心是PostgreSQL数据持久化卷db_data里已经留存了之前初始化生成的旧数据库数据,PostgreSQL官方镜像仅在数据目录完全为空、首次启动初始化时才会读取POSTGRES_PASSWORD环境变量设置用户密码,后续启动时不会再更新已有用户的密码。你当前配置里Hasura连接数据库用的密码,和卷里存的旧postgres用户密码不匹配,就会抛出密码校验失败的错误。
解决方法
根据你是否需要保留现有数据库数据,二选一操作即可:
方案1:不需要保留旧数据(全新部署场景)
- 先停掉并清除当前容器和关联卷,执行命令:
docker-compose down -v
注意:加-v参数会删除绑定的db_data卷里所有存量数据库数据,有重要数据提前备份
- 检查配置一致性:你当前贴的
docker-compose.yaml里,PostgreSQL服务设置的POSTGRES_PASSWORD值,和Hasura服务里两个数据库连接串的密码值是一致的,不需要修改。后续如果要调整密码,记得同步修改两处:一处是postgres服务下的POSTGRES_PASSWORD字段,另一处是HASURA_GRAPHQL_METADATA_DATABASE_URL、PG_DATABASE_URL两个连接串里postgres:后、@postgres:5432前的密码段。 - 重新启动服务:
docker-compose up -d
启动完成后报错就会消失,此时用PgAdmin连接PostgreSQL的参数如下:
- 主机:部署服务的机器IP,本地部署填
localhost - 端口:
5432 - 用户名:
postgres - 密码:配置文件里设置的
postgrespassword - 初始数据库:
postgres
方案2:需要保留卷里的存量数据库数据
不需要删卷删容器,直接手动修改postgres用户密码和配置一致即可:
- 执行命令进入PostgreSQL容器的命令行客户端,把命令里的
<你的postgres容器名>替换成实际的容器名,一般是hasura_101-postgres-1:
docker exec -it <你的postgres容器名> psql -U postgres
- 在打开的psql命令行里执行密码修改SQL:
ALTER USER postgres WITH PASSWORD 'postgrespassword';
- 输入
\q退出psql客户端,重启Hasura容器即可恢复正常:
docker restart <你的hasura容器名>
内容的提问来源于stack exchange,提问作者Pyyyyt
相关产品推荐
相关产品推荐

