【问题标题】:How to fix error "Error: Database is uninitialized and superuser password is not specified."如何修复错误“错误:数据库未初始化且未指定超级用户密码。”
【发布时间】:2020-02-26 19:12:16
【问题描述】:

您好,我在运行 docker-compose build up 后收到此错误

但是我得到了这个错误 postgres_1 |错误:数据库未初始化且未指定超级用户密码。

这是错误的快照!

下面是我的 docker-compose.yml 文件

版本:'3.6'

Server.js 文件

services: 
  smart-brain-api:
    container_name: backend
    build: ./
    command: npm start
    working_dir: /usr/src/smart-brain-api
    ports:
      - "3000:3000"
    volumes:
      - ./:/usr/src/smart-brain-api
 
  #PostGres Database
 
  postgres:
    image: postgres
    ports:
      - "5432:5432"

【问题讨论】:

  • 数据库未初始化且未指定超级用户密码。这表明您必须使用正确的凭据创建数据库
  • POSTGRES_PASSWORD 可以放在与 docker-compose.yml 文件相同的目录中的 .env 文件中。 .env 文件可能如下所示:POSTGRES_PASSWORD=password。 docker-compose.yml 文件可能如下所示:POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}.
  • 我下载了 postgres 图像并且有同样的错误,但我的桌面上没有任何 docker-compose.ymlDockerfilePOSTGRES_HOST_AUTH_METHOD: "trust" 放在哪里?我假设 postgres 在该容器内运行是正确的,还是主机系统应该运行它存在问题?
  • 其他答案涵盖了此处提到的解决方案,但此 CircleCI 论坛帖子提供了一些额外的上下文以及受影响的版本:PostgreSQL Image Password Not Specified Issue

标签: postgresql docker docker-compose


【解决方案1】:

您可以通过对docker-compose.yml 进行以下更改来使用POSTGRES_HOST_AUTH_METHOD 环境属性。

db:
    image: postgres:9.6-alpine
    environment:
      POSTGRES_DB: "db"
      POSTGRES_HOST_AUTH_METHOD: "trust"

以上将解决错误。

【讨论】:

  • 但这是不安全的方法,因为 Postgres 需要注意:“...这是推荐的。”
【解决方案2】:

为避免这种情况,您可以在 docker-compose 文件中为 postgres 容器指定以下环境变量。

POSTGRES_PASSWORD 使用 PostgreSQL 映像通常需要此环境变量。此环境变量设置 PostgreSQL 的超级用户密码。默认超级用户由 POSTGRES_USER 环境变量定义。

POSTGRES_DB 此可选环境变量可用于为首次启动映像时创建的默认数据库定义不同的名称。如果未指定,则使用 POSTGRES_USER 的值。

有关环境变量的更多信息,请查看: https://hub.docker.com/_/postgres

【讨论】:

    【解决方案3】:

    在交互模式中已经提到过;如何运行容器,如果没有找到,使用如下:

    要允许所有没有密码的连接,请使用:

    • docker run -e POSTGRES_HOST_AUTH_METHOD=trust postgres:9.6(使用您需要的标签)。

    要为超级用户指定 postgres 密码,请使用:

    • docker run -e POSTGRES_PASSWORD= postgres:9.6(使用您需要的标签)。

    【讨论】:

      【解决方案4】:

      您可以更改您的 docker-compose.yml 文件,例如:

      分贝: 图片:postgres:13 环境: - “POSTGRES_HOST_AUTH_METHOD=信任”

      【讨论】:

        【解决方案5】:

        您可以使用以下 docker 命令进行连接。

        docker run -e POSTGRES_PASSWORD= postgres:9.6.

        【讨论】:

        • 这与this other answer中的第二个解决方案相同
        • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
        猜你喜欢
        • 2021-12-04
        • 2018-10-19
        • 1970-01-01
        • 2020-06-01
        • 2015-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多