docker 容器中的 postgres 角色“postgres”不存在

Zac*_*eng 7 postgresql docker

  1. 使用以下命令创建一个 postgres docker 容器:docker run -v /home/ec2-user/Vteck-postgres-data:/var/lib/postgresql/data -d -e POSTGRES_USER=odoo POSTGRES_PASSWORD=odoo -e POSTGRES_DB=postgres --name vteck-db postgres

  2. 访问Docker容器: docker exec -it vteck-db bash

  3. 与客户端连接:root@f1ba565db798:/# psql -U postgres psql: error: could not connect to server: FATAL: role "postgres" does not exist

但如果我使用 创建 Docker 容器 docker run --rm -d -e POSTGRES_PASSWORD=root --name postgres postgres,我可以成功连接psql - U postgres

我第一步的命令有问题吗?

ane*_*yte 12

来自Docker hub 上的 postgres 自述文件

POSTGRES_USER

POSTGRES_PASSWORD此可选环境变量与设置用户及其密码结合使用。该变量将创建具有超级用户权限的指定用户和同名的数据库。如果未指定,postgres则将使用默认用户。

换句话说,如果您将某些内容放入POSTGRES_USER环境变量中,启动脚本将遵循这一点并创建该用户而不是默认用户(postgres即)。

此外,此变量和其他POSTGRES_*变量仅在初始启动期间数据库目录为空时使用。因此,如果您使用其他值重新启动容器,则不会产生任何影响(您将在日志中看到有关“数据库似乎正常,跳过初始化”的内容),除非您手动删除数据库。