【问题标题】:docker postgres role does not existdocker postgres 角色不存在
【发布时间】:2021-10-11 09:04:32
【问题描述】:

我正在使用带有 docker 的 postgres 并且遇到了问题。我成功 docker-compose up --build

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

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

但是当我运行以下命令时,我收到错误角色“postgres”不存在
另外\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:
  

【问题讨论】:

    标签: python django postgresql docker docker-compose


    【解决方案1】:

    您通过提供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 进行初始化。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-26
      • 2020-03-04
      • 1970-01-01
      • 2011-12-13
      • 2013-02-24
      • 2011-11-04
      相关资源
      最近更新 更多