postgresql 带有Docker compose的postgres给出致命:角色“root”不存在错误

b91juud3  于 2023-01-25  发布在  PostgreSQL
关注(0)|答案(4)|浏览(641)

我正尝试在本地windows机器上用docker desktop创建一个简单的postgres演示。
这是我的yaml docker编写文件,名为img.yaml

version: '3.6'

services:

    postgres-demo:
      image: postgres:11.5-alpine
      container_name: postgres-demo
      environment:
        - POSTGRES_USER=postgres
        - POSTGRES_PASSWORD=Welcome
        - POSTGRES_DB=conference_app
      healthcheck:
        test: ["CMD-SHELL", "pg_isready -U postgres"]
        interval: 10s
        timeout: 5s
        retries: 5
      ports:
        - 5432:5432
      volumes:
        - .:/var/lib/my_data
      restart: always

我使用以下命令运行它:docker-compose -f img.yaml up并获得以下输出:

Starting postgres-demo ... done
Attaching to postgres-demo
postgres-demo    | 2020-02-12 17:07:46.487 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
postgres-demo    | 2020-02-12 17:07:46.487 UTC [1] LOG:  listening on IPv6 address "::", port 5432
postgres-demo    | 2020-02-12 17:07:46.508 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
postgres-demo    | 2020-02-12 17:07:46.543 UTC [18] LOG:  database system was shut down at 2020-02-12 17:07:10 UTC
postgres-demo    | 2020-02-12 17:07:46.556 UTC [1] LOG:  database system is ready to accept connections

然后,在容器中打开bash,命令如下:docker exec -it d47056217a97 bash
我想在container中查看数据库,所以我在bash中运行以下命令:psql \dt
并得到错误:psql: FATAL: role "root" does not exist.
正在尝试使用以下命令创建数据库:psql> create database conference_app;给出误差:psql: FATAL: role "conference_app" does not exist.
我很困惑。我做错了什么?我的yaml漏掉了什么吗?

cygmwpex

cygmwpex1#

如果不指定PGUSER环境变量,则psql将假定您要使用当前OS用户作为数据库用户名。在这种情况下,您使用root作为OS用户,并尝试以root身份登录,但数据库中不存在该用户。
您需要先调用psql -U postgressu - Postgres
另请参见postgresql文档
更新:有人建议将PGUSER更改为POSTGRES_USER--这实际上是不正确的。Postgres在环境中查找PGUSER,但是如果您正在使用Docker,您将通过使用POSTGRES_USER告诉Docker正确的用户,POSTGRES_USER将被分配给PGUSER--参见入口点源代码

iszxjhcz

iszxjhcz2#

我在docker-compose文件中为服务指定了user: postgres。然后删除了现有的容器,以便在下一次执行docker-compose up时重新旋转它。容器出现了用户“postgres”,所以从那里开始只需要psql -l(不需要-U标志)
这是我的docker-compose文件

version: '3.1'
services:
  db:
    image: postgres:12.6-alpine
    restart: always
    container_name: postgres12_6
    user: postgres
    environment:
      - "POSTGRES_PASSWORD=postgres"
      - "ES_JAVA_OPTS=-Xms1024m -Xmx3072m"
    networks:
      - esnet
  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

networks:
  esnet:
57hvy0tb

57hvy0tb3#

容器假定您试图以root用户(当前用户)连接到数据库,因为您没有在Docker exec上指定用户和数据库名称。

以下各项应起作用:

docker exec -it <container_id/container_name> psql -U <user_name> <database_name>
docker exec -it d47056217a97 psql -U postgres conference_app
wvmv3b1j

wvmv3b1j4#

在我的情况下,我使用的是Windows 10,我尝试了一切我可以,但仍然不工作。
最后,我删除了所有相关的docker映像,docker容器,本地主机文件夹,并重新启动窗口。
一切都很顺利

相关问题