You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 22:36:03