gpt4 book ai didi

python - docker postgres 角色不存在

转载 作者:行者123 更新时间:2023-12-05 05:57:53 25 4
gpt4 key购买 nike

我在使用 postgres 和 docker 时遇到了问题。我成功地 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:

最佳答案

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

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

请注意 因为您正在将一个卷装载到此容器中,该容器现在已经有一个已初始化的数据库,所以即使您重新启动 compose 也不会重新初始化它。您需要 docker volume rm 该卷,以便在启动容器时重新初始化数据库。

关于python - docker postgres 角色不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68682091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com