Docker中Postgres默认超级用户不存在问题排查请求
问题原因及解决办法
核心原因
你在docker-compose.yml的db服务中通过POSTGRES_USER环境变量指定了自定义超级用户dei_acolhimento_root。Postgres官方镜像的初始化逻辑是:如果显式设置了POSTGRES_USER,则只会创建这个指定的用户作为超级管理员,默认的postgres角色不会自动生成。
之前能正常使用psql -U postgres,大概率是因为当时的pgdata数据卷里保留了旧的数据库初始化数据(比如之前未设置POSTGRES_USER时创建的postgres角色),后来数据卷被意外清理、重置,或者容器重新初始化时加载了新配置,导致默认角色消失。
解决办法
方法1:使用正确的用户登录
直接用你配置的自定义用户连接数据库:
psql -U dei_acolhimento_root -d dei_acolhimento_v1
如果已在容器shell内,且容器环境变量已设置PGPASSWORD,可以省略密码输入直接登录。
方法2:创建postgres角色(需重置数据)
如果必须使用postgres角色,需要在初始化脚本中添加角色创建逻辑,然后重置数据卷(注意:此操作会清空现有数据库数据,务必提前备份):
- 编辑
init-database.sh,添加以下内容:
#!/bin/bash set -e # 创建postgres超级角色 psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL CREATE ROLE postgres WITH SUPERUSER LOGIN PASSWORD '你的自定义密码'; EOSQL
- 停止并清理容器及数据卷:
docker-compose down -v
- 重新启动容器:
docker-compose up -d
容器启动时会执行初始化脚本创建postgres角色,之后即可用psql -U postgres登录。
内容的提问来源于stack exchange,提问作者Gi Tobias
相关产品推荐
相关产品推荐

