首页 > 解决方案 > 码头工人撰写:postgres_1 | 错误:数据库未初始化且未指定超级用户密码

问题描述

我有以下docker-compose.yml文件

version: '3'
services:
    postgres:
        image: 'postgres:latest'
    redis:
        image: 'redis:latest'
    nginx:
        restart: always
        build:
            dockerfile: Dockerfile.dev
            context: ./nginx
        ports:
            - '3050:80'
    api:
        build:
            dockerfile: Dockerfile.dev
            context: ./server
        volumes:
            - /app/node_modules
            - ./server:/app
        environment: 
            - REDIS_HOST=redis
            - REDIS_PORT=6379
            - PGUSER=postgres
            - PGHOST=postgres
            - PGDATABASE=postgres
            - PGPASSWORD=postgres_password
            - PGPORT=5432
    client:
        build:
            dockerfile: Dockerfile.dev
            context: ./client
        volumes:
            - /app/node_modules
            - ./client:/app
    worker:
        build:
            dockerfile: Dockerfile.dev
            context: ./worker
        volumes:
            - /app/node_modules
            - ./worker:/app

当我运行时docker-compose up --build,除了 postgres 之外,一切正常,它为我提供了以下错误。我已经尝试为这个问题应用接受的答案,但错误消息不会消失;不知道我在这里缺少什么。

postgres_1  | Error: Database is uninitialized and superuser password is not specified.
postgres_1  |        You must specify POSTGRES_PASSWORD to a non-empty value for the
postgres_1  |        superuser. For example, "-e POSTGRES_PASSWORD=password" on "docker run".
postgres_1  | 
postgres_1  |        You may also use "POSTGRES_HOST_AUTH_METHOD=trust" to allow all
postgres_1  |        connections without a password. This is *not* recommended.
postgres_1  | 
postgres_1  |        See PostgreSQL documentation about "trust":
postgres_1  |        https://www.postgresql.org/docs/current/auth-trust.html

我的文件夹中有这个keys文件server,我认为它在我所遵循的课程中用于提供文件中的environment参数:apidocker-compose

module.exports = {
    redisHost: process.env.REDIS_HOST,
    redisPort: process.env.REDIS_PORT,
    pgUser: process.env.PGUSER,
    pgHost: process.env.PGHOST,
    pgDatabase: process.env.PGDATABASE,
    pgPassword: process.env.PGPASSWORD,
    pgPort: process.env.PGPORT,
}

标签: postgresqldockerdocker-compose

解决方案


根据文档,postgres 图像POSTGRES_PASSWORD​​要设置环境变量。

像这样的东西:

postgres:
  image: 'postgres:latest'
  environment:
    POSTGRES_PASSWORD: example

没有更多的了。您可以尝试仅使用该代码创建一个 docker-compose.yml 并查看它是否以docker compose up(应该)正确启动。

postgres:latest如果仍然没有,则缓存的图像可能有问题。可能想尝试 adocker image rm postgres然后再次调用 docker compose 命令。

警告:在执行此操作之前,请确保您的数据库中没有重要数据。


推荐阅读