Search code examples
postgresqldockerubuntudocker-composepgadmin-4

How can I connect to docker Postgres server from PGAdmin4


I am new to Docker containers but not quite new to Postgres (I delved a bit in the past).

The thing is I am trying to connect to a Postgres server started from the following Docker container dpage/pgadmin4

The issue is that I cannot connect to the server using PGAdmin4. I am getting the following error:

could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Address not available
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?

I have the following yaml file:

version: '3'

services:
  db:
    image: postgres
    restart: always
    ports:
      - "5432:5432"
    environment:
      POSTGRES_DB: postgres
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: parola
      PGDATA: /var/lib/postgresql/data/pgdata
      
  pgadmin4:
    image: dpage/pgadmin4
    ports:
      - "5050:80"
    environment:
      PGADMIN_DEFAULT_EMAIL: user@domain.com
      PGADMIN_DEFAULT_PASSWORD: parola

Using the psql command line I can connect to it only if I set -h 0.0.0.0, as follows:

psql -h 0.0.0.0 -U postgres

Can someone tell me what I need to set up in the yaml file or how I can configure so it allow connection from localhost/127.0.0.1?

I am running on Ubuntu 20.04.2, AMD64 with Docker version 20.10.7, build f0df350.


Solution

  • service pgadmin4 is not being able reach service db because inside pgadmin4 at port 5432 there wont be any service running

    With this configuration, you are only mapping the db to host machine's 5432 port. That is why you were able to run psql -h 0.0.0.0 -U postgres in your machine (host machine)

    According to docker-compose pgadmin4 can access DB using host name db

    you can link the configuration with some additional configuration as below

    version: '3'
    
    services:
      db:
        image: postgres
        restart: always
        ports:
          - "5432"
        environment:
          POSTGRES_DB: postgres
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: parola
          PGDATA: /var/lib/postgresql/data/pgdata
    
      pgadmin4:
        image: dpage/pgadmin4
        ports:
          - "5050:80"
        environment:
          PGADMIN_DEFAULT_EMAIL: user@domain.com
          PGADMIN_DEFAULT_PASSWORD: parola
        volumes:
        - ./servers.json:/pgadmin4/servers.json
    
    

    add a file called servers.json in the same directory as docker-compose with the below contents. take note that I have added the Host as db

    {
      "Servers": {
        "1": {
          "Name": "local db",
          "Group": "Server Group 1",
          "Port": 5432,
          "Username": "postgres",
          "Host": "db",
          "SSLMode": "prefer",
          "MaintenanceDB": "postgres"
        }
      }
    }