PostgreSQL在Docker容器中,角色"postgres"不存在。

6
  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

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

2个回答

11

来自Docker hub上的postgres readme

POSTGRES_USER

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

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

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


我遇到了同样的问题,这篇文章帮助我理解了问题,谢谢。现在我正在寻找用于登录Odoo的PostgreSQL命令,我想连接到数据库以构建REST API。 - Nimr Sawafta
1
@NimrSawafta 请尝试以下命令:docker exec -e PGPASSWORD=odoo -it POSTGRES_CONTAINER_NAME psql -U odoo - anemyte

1
在您的yml文件中,创建一个名为POSTGRES_DB的数据库,但该数据库名称不应为“postgres”。
<snip>
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: heavymetaldifficultmoeilijk
      POSTGRES_DB: foodb
<snip>

从主机连接到您的容器:

# docker exec -it myproject_pg_container_name /bin/bash

然后,从容器中开始:
root@d14c082e80c8:/# psql -U postgres

迈克尔


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接