如何修复错误“错误:数据库未初始化且未指定超级用户密码。”

joh*_*ohn 32 postgresql docker docker-compose

您好,我在运行 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"
Run Code Online (Sandbox Code Playgroud)

Lab*_*ban 38

您可以POSTGRES_HOST_AUTH_METHOD通过对docker-compose.yml.

db:
    image: postgres:9.6-alpine
    environment:
      POSTGRES_DB: "db"
      POSTGRES_HOST_AUTH_METHOD: "trust"
Run Code Online (Sandbox Code Playgroud)

以上将解决错误。

  • 但这是不安全的方法,因为 Postgres 注意到:“……*不*推荐。” (5认同)

小智 27

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

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

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

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


小智 10

在交互模式中已经提到了;如何运行容器,如果找不到,请使用以下内容:

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

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

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

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


小智 7

总结一下 docker 官方网站上的命令:

docker run --name <YOUR_POSTGRES_DB> -e POSTGRES_PASSWORD=<YOUR_POSTGRES_PASSWORD> -d postgres
Run Code Online (Sandbox Code Playgroud)