Docker中的Postgres角色不存在。

4

我正在使用docker中的postgres,但遇到了一些问题。我成功执行了docker-compose up --build命令。

当我运行以下命令时,它可以正常工作。psql按预期使用my_username用户启动。我可以看到我的数据库,\l,\dt命令正常工作。

docker-compose exec db psql --username=my_username --dbname=my_database

但是,当我运行以下命令时,我会收到错误消息"role “postgres” does not exist"
此外,\l和\dt都无法正常工作,即使psql命令也无法正常工作。

docker exec -it my_db_container_1 bash

su - postgres

createuser --createdb --password new_user

如何在第二种情况下解决问题?出了什么问题?我感到困惑。

docker-compose.yml

version: "3.9"

services:
  #### other services ####
  db:
    image: postgres:latest
    restart: always
    environment:
      POSTGRES_DB: my_database
      POSTGRES_USER: my_username
      POSTGRES_PASSWORD: my_password
    ports:
      - 5432
    volumes:
      - postgres_data:/var/lib/postgresql/data/


volumes:
  postgres_data:
  
1个回答

0
您已通过提供POSTGRES_USERPOSTGRES_DBPOSTGRES_PASSWORD环境变量更改了postgres数据库初始化时使用的默认用户名/数据库/密码。当您运行没有-U选项的createuser时,它会尝试连接当前用户(postgres在这种情况下),但该用户不存在于数据库中,因为您使用用户my_username进行了初始化。之所以docker-compose exec db psql --username=my_username --dbname=my_database能够工作,是因为您正确地提供了数据库初始化时使用的用户名和数据库名称。
如果您删除POSTGRES_USERPOSTGRES_DB环境变量,它将使用默认值postgres/postgres进行初始化。
请注意,因为您正在将卷挂载到此容器中,该容器现在已经有一个初始化的数据库,即使您重新启动compose,它也不会重新初始化。您需要docker volume rm该卷才能在启动容器时重新初始化数据库。

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