UMA*_*MAR 5 python django postgresql docker docker-compose
我正在将 postgres 与 docker 一起使用,但遇到了问题。我成功 docker-compose up --build
\n当我运行下面的命令时它工作正常。psql 按预期以 my_username 用户开头。我可以看到我的数据库,\\l,\\dt 命令工作正常。
\n\n\ndocker-compose exec db psql --username=my_username\n--dbname=my_database
\n
但是当我运行下面的命令时,我得到错误role \xe2\x80\x9cpostgres\xe2\x80\x9d does not exit,
\n另外 \\l, \\dt 不起作用,甚至psql命令也不起作用
\n\ndocker exec -it my_db_container_1 bash
\nsu-postgres
\ncreateuser --createdb --password new_user
\n
在第二种情况下我怎样才能做到正确?出了什么问题?我很困惑
\ndocker-compose.yml
\nversion: "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 \nRun Code Online (Sandbox Code Playgroud)\n
您已通过提供POSTGRES_USER、POSTGRES_DB和POSTGRES_PASSWORD环境变量更改了 postgres 数据库初始化时使用的默认用户名/数据库/密码。createuser当您在没有选项的情况下运行时-U,它会尝试以当前用户(在本例中为 postgres)的身份进行连接,该用户在数据库中不存在,因为您使用 user 对其进行了初始化my_username。之所以docker-compose exec db psql --username=my_username --dbname=my_database有效,是因为您正确提供了数据库初始化时使用的用户名和数据库名称。
如果删除POSTGRES_USER和POSTGRES_DB环境变量,它将使用默认值 postgres/postgres 进行初始化。
请注意,由于您正在将一个卷安装到此容器中,因此该容器中现在已经有一个初始化的数据库,因此即使您重新启动撰写,它也不会重新初始化。您需要docker volume rm该卷才能在启动容器时重新初始化数据库。
| 归档时间: |
|
| 查看次数: |
5001 次 |
| 最近记录: |