uber
uber

Reputation: 5103

docker-compose: postgres_1 | Error: Database is uninitialized and superuser password is not specified

I have the following docker-compose.yml file

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

When I run docker-compose up --build, everything works fine apart from postgres, which provides me with the error below. I've tried applying the accepted answer for this question but the error message won't go away; not sure what I'm missing here.

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

I've got this keys file inside of my server folder, which I think was used on the course I'm following to provide the environment parameters of the api in the docker-compose file:

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,
}

Upvotes: 0

Views: 2386

Answers (1)

ovalb
ovalb

Reputation: 605

As per documentation, the postgres image needs the environment variable POSTGRES_PASSWORD to be set.

Something like this:

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

There's not much more to it. You can try to create a docker-compose.yml with just that code and see if it starts correctly with docker compose up (it should).

If it still doesn't there might be something wrong with the cached postgres:latest image. Might wanna try a docker image rm postgres and then calling the docker compose command again.

Warning: make sure you didn't have important data in the db before doing that.

Upvotes: 2

Related Questions