docker postgres 角色不存在

UMA*_*MAR 5 python django postgresql docker docker-compose

我正在将 postgres 与 docker 一起使用,但遇到了问题。我成功 docker-compose up --build

\n

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

\n
\n

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

\n
\n

但是当我运行下面的命令时,我得到错误role \xe2\x80\x9cpostgres\xe2\x80\x9d does not exit
\n另外 \\l, \\dt 不起作用,甚至psql命令也不起作用

\n
\n

docker exec -it my_db_container_1 bash

\n

su-postgres

\n

createuser --createdb --password new_user

\n
\n

在第二种情况下我怎样才能做到正确?出了什么问题?我很困惑

\n

docker-compose.yml

\n
version: "3.9"\n\nservices:\n  #### other services ####\n  db:\n    image: postgres:latest\n    restart: always\n    environment:\n      POSTGRES_DB: my_database\n      POSTGRES_USER: my_username\n      POSTGRES_PASSWORD: my_password\n    ports:\n      - 5432\n    volumes:\n      - postgres_data:/var/lib/postgresql/data/\n\n\nvolumes:\n  postgres_data:\n  \n
Run Code Online (Sandbox Code Playgroud)\n

kth*_*pso 0

您已通过提供POSTGRES_USERPOSTGRES_DBPOSTGRES_PASSWORD环境变量更改了 postgres 数据库初始化时使用的默认用户名/数据库/密码。createuser当您在没有选项的情况下运行时-U,它会尝试以当前用户(在本例中为 postgres)的身份进行连接,该用户在数据库中不存在,因为您使用 user 对其进行了初始化my_username。之所以docker-compose exec db psql --username=my_username --dbname=my_database有效,是因为您正确提供了数据库初始化时使用的用户名和数据库名称。

如果删除POSTGRES_USERPOSTGRES_DB环境变量,它将使用默认值 postgres/postgres 进行初始化。

请注意,由于您正在将一个卷安装到此容器中,因此该容器中现在已经有一个初始化的数据库,因此即使您重新启动撰写,它也不会重新初始化。您需要docker volume rm该卷才能在启动容器时重新初始化数据库。