【问题标题】:Can't set Password for Postgres using docker-compose无法使用 docker-compose 为 Postgres 设置密码
【发布时间】:2023-04-16 04:35:01
【问题描述】:

我无法使用 Docker-compose 为 Postgres 设置密码。 Postgres 在没有密码的情况下加载,并且使用默认用户名“postgres”,似乎没有应用以下环境变量。下面是我的 docker-compose.yml 文件的数据库服务:(版本 3)

db:
  image: postgres
  container_name: postgres
  environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
      POSTGRES_DB: db
  restart: unless-stopped
  volumes:
    - ./postgres-data:/var/lib/postgresql/data
  ports:
    - "5432:5432"

请注意,我也尝试使用“-POSTGRES_USER=”,但没有成功

另外,我删除了所有旧容器/卷。

有什么想法吗?

【问题讨论】:

  • 登录权限在pg_hba.conf文件中设置。
  • 共享卷文件夹./postgres-data中是否有pg_hba.conf文件?

标签: postgresql docker yaml docker-compose


【解决方案1】:

问题应该是附加的卷。当您的容器启动时,它将添加您提供给他的凭据,但随后将附加该卷,这将导致此信息被重写。

欲了解更多信息,请查看https://github.com/docker-library/postgres/issues/203#issuecomment-255200501

【讨论】:

  • 嗨@FrankerZ 感谢您的反馈。我只是花钱提供相关信息。如果您认为这个答案更合适,请告诉我。
  • 是的,问题是音量。我只是更改了我的卷名,它接受了新的凭据。
【解决方案2】:

主要原因是在环境部分使用“:”而不是“=”。 理想情况下应该是这样的:

db:
  image: postgres
  container_name: postgres
  environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD= pass
      - POSTGRES_DB= db
  restart: unless-stopped
  volumes:
    - ./postgres-data:/var/lib/postgresql/data
  ports:
    - "5432:5432"

虽然这很晚,但我希望这对寻求类似解决方案的人有所帮助。

【讨论】:

    【解决方案3】:

    您的配置对我来说很好。我怀疑您没有使用完整的正确凭据集,其中包括用户名、密码、和数据库名称。如果我以您的示例docker-compose.yaml 为例并在不修改的情况下运行它,我可以使用用户名user 和密码pass 像这样连接到数据库db

    $ psql -h localhost -U user db
    Password for user user: 
    psql (9.5.7, server 9.6.1)
    WARNING: psql major version 9.5, server major version 9.6.
             Some psql features might not work.
    Type "help" for help.
    
    db=# 
    

    【讨论】:

      【解决方案4】:

      启动 postgres 实例:-

      docker run --name postgres-0 -e POSTGRES_PASSWORD=mypassword -p 5433:5433 -d postgres

      现在我们可以通过这个命令检查 docker 所有正在运行的容器:-

      码头工人ps

      【讨论】:

      • 这与 Dockerfile 相关,与 docker-compose 无关。投反对票。
      最近更新 更多