Docker中PostgreSQL容器提示role 'postgres'不存在问题咨询
问题根因分析
1. 自定义超级用户导致默认角色未创建
PostgreSQL官方Docker镜像的初始化逻辑为:首次启动容器时如果指定了POSTGRES_USER环境变量,会将该变量值设为默认的超级用户名,不再自动创建默认的postgres超级用户。
你第一条启动命令中配置了-e POSTGRES_USER=odoo,因此容器内的Postgres实例只有odoo超级用户,不存在postgres角色,自然会出现role "postgres" does not exist的报错。
而你第二条启动命令没有配置POSTGRES_USER,镜像会使用默认值postgres作为超级用户名,所以可以正常使用psql -U postgres登录。
2. 启动命令存在语法错误
第一条启动命令中的POSTGRES_PASSWORD=odoo前缺少-e参数,导致该环境变量没有被正确传递到容器中,后续登录、权限配置环节也可能出现异常。
修复方案
你可以根据自身需求选择任意一种方案:
- 如果你需要保留
odoo作为超级用户,登录数据库时使用如下命令即可:psql -U odoo - 如果你需要保留默认的
postgres超级用户,创建容器时去掉POSTGRES_USER=odoo的配置即可。 - 无论选择哪种方案,都需要修复启动命令的语法错误,补充
POSTGRES_PASSWORD前的-e参数,修复后的命令示例如下:docker run -v /home/ec2-user/Vteck-postgres-data:/var/lib/postgresql/data -d -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo -e POSTGRES_DB=postgres --name vteck-db postgres
注意:如果你已经挂载了旧的 data 目录,初始化配置已经生成,修改环境变量不会生效,需要清空挂载目录后再重新启动容器才能触发重新初始化。
内容的提问来源于stack exchange,提问作者Zacksung Zeng
相关产品推荐
相关产品推荐

