Search code examples
postgresqldockerdocker-composepgadminpgadmin-4

Docker dpage/pgadmin4 error: specified user does not exist


This is the docker-compose.yml file:

version: '3'

services:
############################
# Setup database container #
############################
  postgres_db:
    image: postgres
    restart: always
    ports:
      - ${POSTGRES_PORT}:${POSTGRES_PORT}
    environment: 
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - PGDATA=/var/lib/postgresql/data/pgdata
      - POSTGRES_DB=${POSTGRES_DB}
    volumes:
      - ./data:/var/lib/postgresql/data 
    networks:
      - db_network

  pgadmin:
    image: dpage/pgadmin4:4.19
    restart: always
    ports:
      - 8001:8080/tcp
    environment: 
      - PGADMIN_LISTEN_ADDRESS=0.0.0.0
      - PGADMIN_LISTEN_PORT=8080
      - PGADMIN_DEFAULT_EMAIL=${PGADMIN_DEFAULT_EMAIL}
      - PGADMIN_DEFAULT_PASSWORD=${PGADMIN_DEFAULT_PASSWORD}
    networks:
      - db_network

networks: 
  db_network:
    driver: bridge

There is a .env file in the same directory.

# The above refers to the name of the postgres container since using docker-compose
# This is because docker-compose creates a user-defined network. Kubernetes also does this.
POSTGRES_PORT=5432
POSTGRES_USER=website
POSTGRES_PASSWORD=website
POSTGRES_DB=wikifakes_main
PGADMIN_DEFAULT_EMAIL=info@my-website.com
PGADMIN_DEFAULT_PASSWORD=my-secure-password 

When executing docker-compose up --build both docker start and I can access the pgAdmin4 website via localhost:8001. However, after entering the credentials, I get the following response:

Specified user does not exist

Why does the specified user not exist and how should I change my environment so that I can log in?

The login on an pgadmin4 docker created via docker run --rm -e PGADMIN_DEFAULT_EMAIL="info@my-website.com" -e PGADMIN_DEFAULT_PASSWORD="my-secure-password" -p 8001:80 dpage/pgadmin4 works alright though.


Solution

  • Add tty: true to the pgadmin service in the docker-compose.yml file.

    
      pgadmin:
        image: dpage/pgadmin4:4.19
        restart: always
        ports:
          - 8001:8080/tcp
        environment: 
          - PGADMIN_LISTEN_ADDRESS=0.0.0.0
          - PGADMIN_LISTEN_PORT=8080
          - PGADMIN_DEFAULT_EMAIL=${PGADMIN_DEFAULT_EMAIL}
          - PGADMIN_DEFAULT_PASSWORD=${PGADMIN_DEFAULT_PASSWORD}
        networks:
          - db_network
        # ADD THIS LINE
        tty: true
    

    So the complete file will look as follows:

    version: '3'
    
    services:
    ############################
    # Setup database container #
    ############################
      postgres_db:
        image: postgres
        restart: always
        ports:
          - ${POSTGRES_PORT}:${POSTGRES_PORT}
        environment: 
          - POSTGRES_USER=${POSTGRES_USER}
          - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
          - PGDATA=/var/lib/postgresql/data/pgdata
          - POSTGRES_DB=${POSTGRES_DB}
        volumes:
          - ./data:/var/lib/postgresql/data 
        networks:
          - db_network
    
      pgadmin:
        image: dpage/pgadmin4:4.19
        restart: always
        ports:
          - 8001:8080/tcp
        environment: 
          - PGADMIN_LISTEN_ADDRESS=0.0.0.0
          - PGADMIN_LISTEN_PORT=8080
          - PGADMIN_DEFAULT_EMAIL=${PGADMIN_DEFAULT_EMAIL}
          - PGADMIN_DEFAULT_PASSWORD=${PGADMIN_DEFAULT_PASSWORD}
        networks:
          - db_network
        # ADD THIS LINE, TO BE ABLE TO LOGIN
        tty: true
    
    networks: 
      db_network:
        driver: bridge