docker postgres pgadmin local connection

PostgresqlDockerPgadmin

Postgresql Problem Overview


I have created an ubuntu image with nginx, php and postgres.

I want to connect the postgres database in my current image with pgadmin located on my local machine.

I have tried using docker inspector to try to use the image ip to make a connection with my local pgadmin but without much success. I've also tried configuring some ports on local to make connection work.

Postgresql Solutions


Solution 1 - Postgresql

It's a valid question don't know why people feel "doesn't seem possible to answer that question".

So, here's how I do what you are trying to do:

  1. Pull postgres image from Docker Hub

    docker pull postgres:latest
    
  2. Run the container using the below command

    docker run -p 5432:5432 postgres
    
  3. Using docker's inspect command find the IP

  4. Use that IP, PORT, Username, and Password to connect in PGADMIN

  5. You can also do a simple telnet like below to confirm if you can access docker postgres container:

    telnet IP_ADDRESS 5432
    

Solution 2 - Postgresql

This is what i did

for postgres

docker run -p 5432:5432  --name container-postgresdb -e POSTGRES_PASSWORD=admin -d postgres

for pgadmin

docker run -p 5050:80  -e "[email protected]" -e "PGADMIN_DEFAULT_PASSWORD=admin"  -d dpage/pgadmin4

Connection string for pgadmin

host: host.docker.internal
database: postgres
user: postgres
password: admin

It works fine!!!!!

Solution 3 - Postgresql

What I have done success on windows 10 running docker for windows 1.12.6(9655), the step is like below:

  1. Pull the latest postgres

docker pull postgres:latest

  1. run the postgres containner:

docker run -d -e POSTGRES_USER=user -e POSTGRES_PASSWORD=password123 --name db-my -p 5432:5432 --restart=always postgres

  1. Then installed the latest version of pgAdmin4 from pgadmin website

4. Run pgAdmin 4 create new server, and input as following Host: 127.0.0.1 Port: 5432 User name: user password: password123 5. Then everything is ok, connect to docker postgres instance success.

Solution 4 - Postgresql

Alternatively, you could combine Postgres and Pgadmin in one docker-compose file, and login as user [email protected], pwd: admin. To add the Posgres server, use hostname postgres, port 5432.

version: '3'
services:
  postgres:
    image: postgres
    hostname: postgres
    ports:
      - "6543:5432"
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: TEST_SM
    volumes:
      - postgres-data:/var/lib/postgresql/data
    restart: unless-stopped

  pgadmin:
    image: dpage/pgadmin4
    depends_on:
      - postgres
    ports:
      - "5555:80"
    environment:
      PGADMIN_DEFAULT_EMAIL: [email protected]
      PGADMIN_DEFAULT_PASSWORD: admin
    restart: unless-stopped

volumes:
  postgres-data:

Solution 5 - Postgresql

If you verified that PostgreSQL is running and you can connect there with local copy of PgAdmin...

The answer is simple: use host.docker.internal istead of localhost for the PgAdmin running inside the Docker

use host.docker.internal istead of localhost

Solution 6 - Postgresql

In my case I could solve the problem inspecting my postgre image through command

docker inspect CONTAINER_ID  | grep IPAddress.

So, I used the docker ip address to config my pgadmin 4 connection and everything was fine. Thanks to @Afshin Ghazi

Solution 7 - Postgresql

I included this in the docker yaml file to get the database and pgAdmin:

database:
    image: postgres:10.4-alpine
    container_name: kafka-nodejs-example-database
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    expose:
      - "5432"
    ports:
      - 8000:5432
    volumes:
      - ./services/database/schema.sql:/docker-entrypoint-initdb.d/1-schema.sql
      - ./services/database/seed.sql:/docker-entrypoint-initdb.d/2-seed.sql
  pgadmin:
    image: dpage/pgadmin4
    ports:
      - 5454:5454/tcp
    environment:
      - [email protected]
      - PGADMIN_DEFAULT_PASSWORD=postgres
      - PGADMIN_LISTEN_PORT=5454

The postgres username is alphaone and the password is xxxxxxxxxxx.

Do a docker ps to get the container id and then docker inspect <dockerContainerId> | grep IPAddress

eg: docker inspect 2f50fabe8a87 | grep IPAddress

Insert the Ip address into pgAdmin and the database credentials used in docker:

pgAdmin

Solution 8 - Postgresql

If pgAdmin is intended to be run wihtin same Ubuntu host/guest, then you need to link postgres container, so it could be resolved by a name.

1. Run a postgres container:

docker run --name some-postgres -e POSTGRES_PASSWORD=postgres -d postgres

2. Run pgAdmin container:

docker run -p 80:80 --link some-postgres -e "[email protected]" -e "PGADMIN_DEFAULT_PASSWORD=postgres" -d dpage/pgadmin4

3. Now when adding new server in phAdmin web app, use some-postgres as server name

Note the --link some-postgres when we were bringing up the pgAdmin. This command makes postgres container visible to pgAdmin container.

Solution 9 - Postgresql

This worked for me on Ubuntu 18:

1- Run a postgres container

docker run -d -e POSTGRES_USER=user -e POSTGRES_PASSWORD=password123 --name my-postgres -p 5432:5432 postgres

2- Run a pgAdmin container

docker run --rm -p 5050:5050 thajeztah/pgadmin4

3- Get your local IP (in Ubuntu by ifconfig command)

4- Open localhost:5050 in your browser

5- Click on Servers >> Create >> Server...

6- In General tab, give it a name, for example: docker. In Connection tab, enter these fields:

> Host name: The IP from 3 > > Username: user > > Password: password123

7- Click on Save and now everything should work fine.

Note: If this didn't work, try "localhost" for the host name.

Solution 10 - Postgresql

After facing this issue for two days i was able to resolve that issue.

solution of this problem is already answered by peoples like do inspect

docker inspect CONTAINER_ID

but while running this command i got a-lot of logs like Host Config Config Network Settings etc. so i got confused which IPAddress to add in the pgAdmin connection because i tried 0.0.0.0 and config, host, networkSettings different -2 IPAddress in the logs but finally it works after trying a-lot.

it works with which IP, we have to add that network ip address (which we created to connect the postgres and pgAdmin.)

like in my case when i run :-

> docker inspect postgres_container

 "NetworkSettings": {
        "Bridge": "",
        "SandboxID": "sdffsffsfsfsfsf123232e2r3pru3ouoyoyuosyvo8769696796",
        "HairpinMode": false,
        "LinkLocalIPv6Address": "",
        "LinkLocalIPv6PrefixLen": 0,
        "Ports": {
            "5432/tcp": [
                {
                    "HostIp": "0.0.0.0",
                    "HostPort": "5432"
                }
            ]
        },
        "SandboxKey": "/var/run/docker/231231Ad132",
        "SecondaryIPAddresses": null,
        "SecondaryIPv6Addresses": null,
        "EndpointID": "",
        "Gateway": "",
        "GlobalIPv6Address": "",
        "GlobalIPv6PrefixLen": 0,
        "IPAddress": "",
        "IPPrefixLen": 0,
        "IPv6Gateway": "",
        "MacAddress": "",
        "Networks": {
            "postgres": {
                "IPAMConfig": null,
                "Links": null,
                "Aliases": [
                    "postgres",
                    "0e2j3bn2m42"
                ],
                "NetworkID": "35rhlhl3l53l5hlh3523233k3k4k22l3hk2k4",
                "EndpointID":"b3424n43k52o2i4n235k1k4l2l4hj234f14n2",
                "Gateway": "192.168.16.1",
                "IPAddress": "192.168.16.2",
                "IPPrefixLen": 20,
                "IPv6Gateway": "",

so we have to add the NetworkSettings -> Network -> Postgres(mine created network) -> IPAddress i.e. "IPAddress": "192.168.16.2".

After adding this ip it will work.

I hope it will help.

Solution 11 - Postgresql

In order or find your IP of the container, use following command

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id

Referrence: https://stackoverflow.com/questions/17157721/how-to-get-a-docker-containers-ip-address-from-the-host?page=1&tab=oldest#tab-top

Solution 12 - Postgresql

In my case, I had a PostgreSQL container, so I didn't change my container or create a docker-compose approach, I needed pgadming after few months to had installed PostgreSQL, so this is my approach:

  1. docker inspect my_container_id_postgreSQL

  2. The network assigned to PostgreSQL was:

    "Networks": { "docker_default": { "IPAddress": "172.18.0.2", ... } }

  3. Ran my PGADMIN with --network command.

    docker run -p 85:80 --network docker_default -e 'PGADMIN_DEFAULT_EMAIL=[email protected]' -e 'PGADMIN_DEFAULT_PASSWORD=SuperSecret' -d dpage/pgadmin4

  4. Insert the Ip address into pgAdmin and the database credentials used in docker.

I hope this can be useful for someone. Regards.

Solution 13 - Postgresql

You have to expose the postgres port in the container to you local system. You do this by running your container like this:

docker run -p 5432:5432 <name/id of container>

when connecting with your GUI client or CLI make sure to use the ip-address not localhost even if your ip-address is the localhost ip-address.

docker ps would give you the ip address your postgres container is on.

Solution 14 - Postgresql

You can create a Docker bridge network to do this too.

$ docker network create pgnet
a0ae44aaf6f806fc37302e4c603b4828c4edb8d487fd9cd90e2fb19ae1d5c65f

$ docker run --detach \
    --name pg \
    --network pgnet \
    --publish 5432:5432 \
    --restart always \
    --env POSTGRES_PASSWORD=pg123 \
    --volume ${PWD}/data:/var/lib/postgresql/data \
    postgres:12.1
b60611e43727dabe483c1f08fdf74961b886ce05b432a10a0625bd1b6db87899

$ docker run --detach \
    --name pgadm \
    --network pgnet \
    --publish 8000:80 \
    --volume ${PWD}/pgadmin:/var/lib/pgadmin \
    --env [email protected] \
    --env PGADMIN_DEFAULT_PASSWORD=pgadm123 \
    dpage/pgadmin4:4.20
27f9ce1c1c4c383ee1507f4e2d88f6ef33d4fcf5b209a8a03b87519f90d56312

Open http://localhost:8000/

  1. Click Add New Server
  2. Create - Server
    1. Name: db
    2. Hostname/address: pg
    3. Username: postgres
    4. Password: pg123
  3. Save

The Hostname/address used above is the name of the Postgres container given by --name pg

Solution 15 - Postgresql

For macOS IPs of postgres and pgadmin4 are different from the ones docker inspect provides. Type

docker-machine ls

Take a look at the name of the server on the left. It's default by default.

docker-machine ip default will IP you need to use for both, pgadmin4 in browser and for postgres in pgadmin4 settings.

Solution 16 - Postgresql

To find the correct ip for your container, execute the following commands:

Check container ID:

docker ps

To check the correct IP of your container:

docker inspect <ID_CONTAINER> | grep "IPAddress"

The configuration of both PostgreSQL and PgAdmin with Docker are simple, if not right, I recommend redoing the configuration from scratch, if your problem is deeper.

Here is a script I developed to solve this problem. script-sh/install-docker-postgres-and-pgadmin

Solution 17 - Postgresql

If local host port 5432 already in use by another psql servers, change it when creating the container and in Pgadmin. screen

Solution 18 - Postgresql

When you start container you have network alias for it. Just use this alias in pgadmin UI. Like if you have the following docker compose config:

version: "3.5"
services:
  postgres:
    container_name: postgres-14
    image: postgres:14.1
    restart: unless-stopped
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_HOST_AUTH_METHOD=trust
      - POSTGRES_PASSWORD=root
      - POSTGRES_USER=postgres
    hostname: postgres
  pgadmin:
    container_name: pgadmin4
    image: dpage/pgadmin4
    restart: unless-stopped
    ports:
      - "80:80"
    environment:
      - POSTGRES_HOST_AUTH_METHOD=trust
      - [email protected]
      - PGADMIN_DEFAULT_PASSWORD=admin
    hostname: pgadmin

You can add server with hostname: postgres

enter image description here

Solution 19 - Postgresql

The solution I tried and worked for me, was to create a docker compose file where I included postgress and pgadmin as services. For more details: https://stackoverflow.com/questions/53266285/connecting-pgadmin-to-postgres-in-docker

Solution 20 - Postgresql

Are you using Window Subsystem LinuxWSL2 to run Docker and PgAdmin? The steps I suggested is similar to what folks suggested. In my case I am using window environment

Step 1: Open CMD and type ipconfig and hit enter.

Step 2: Check WSL IPv4 Adress

Ethernet adapter vEthernet (WSL):

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : 3bd9::997b:b52a::fe80::65b3%63
   IPv4 Address. . . . . . . . . . . : 172.172.172.1  // use the IP as host/address
   Subnet Mask . . . . . . . . . . . : 255.255.255.255

Step 3: Open PgAdmin from the browse and create a server

Step 4:

// Here it depends on your desired config mine is the following

Server: postgres
host address:  IPv4 Address(step 2)
username: postgress(username for postgress)
password: password(password for postgress)

I spend two days to figure out what was wrong, I hope someone will find it helpful

Solution 21 - Postgresql

I did not connect with my container pg (dpage/pgadmin4 image) from browser on 0.0.0.0:9090 .

I ran this command :

docker run --name pg -p 9090:9090 -e PGADMIN_DEFAULT_EMAIL='faizan' -e PGADMIN_DEFAULT_PASSWORD='faizan'  -d dpage/pgadmin4

Solution one :

First I tried to inspect the container for IP address

docker inspect pg 

I got the container IP address "IPAddress": "172.17.0.3". http://172.17.0.3:9090 did not accessible.

Solution two :

And then I ran command without de-attached mode (-d removed)

docker run --name pg -p 9090:9090 -e PGADMIN_DEFAULT_EMAIL='faizan' -e PGADMIN_DEFAULT_PASSWORD='faizan' dpage/pgadmin4
# Output, it should be running on 9090.
Listening at: http://[::]:80

-p 9090:9090 did not work.

Finally I found the solution :

> On some filesystems that do not support extended attributes, it may > not be possible to run pgAdmin without specifying a value for > PGADMIN_LISTEN_PORT that is greater than 1024. In such cases, specify > an alternate port when launching the container by adding the > environment variable, for example: > > -e 'PGADMIN_LISTEN_PORT=5050' > > Don’t forget to adjust any host-container port mapping accordingly.

Read more about it official doc

I added -e 'PGADMIN_LISTEN_PORT=9090' and worked for me.

You can try both solutions, it will definitely work for you.

Solution 22 - Postgresql

I ran this, It worked for me

docker pull dpage/pgadmin4
docker run -p 9000:80 -e '[email protected]' -e 'PGADMIN_DEFAULT_PASSWORD=root' -d dpage/pgadmin4

Solution 23 - Postgresql

If you're on a mac and localhost use below as credentials:

version: '3.5'

services:
  postgres:
    container_name: postgres_container
    image: postgres
    environment:
      POSTGRES_USER: ${POSTGRES_USER:-postgres}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme}
      PGDATA: /data/postgres
    volumes:
       - postgres:/data/postgres
    ports:
      - "5432:5432"
    networks:
      - postgres
    restart: unless-stopped
  
  pgadmin:
    container_name: pgadmin_container
    image: dpage/pgadmin4
    environment:
      PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL:[email protected]}
      PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD:-admin}
      PGADMIN_CONFIG_SERVER_MODE: 'False'
    volumes:
       - pgadmin:/var/lib/pgadmin

    ports:
      - "${PGADMIN_PORT:-5050}:80"
    networks:
      - postgres
    restart: unless-stopped

networks:
  postgres:
    driver: bridge

volumes:
    postgres:
    pgadmin:

Connection:

Hostname/Address: host.docker.internal or 0.0.0.0

Port: 5432

username: postgres

database: postgres

password: changeme

Solution 24 - Postgresql

What I have done success on macOS Monterrey running Docker Desktop for macOS(M1):

  1. Pull the latest postgres:

docker pull postgres

  1. Run the postgres container:

docker run -d -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres --name postgres-server -p 5432:5432 --restart=always postgres

  1. Then installed the latest version of pgAdmin 4 (macOS) from pgadmin website

  2. Run pgAdmin 4 create new server, and input as following Host: 127.0.0.1 Port: 5432 User name: postgres password: postgres

pgAdmin 4: Connection postgres-server

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRigoxlsView Question on Stackoverflow
Solution 1 - Postgresqlstack.itView Answer on Stackoverflow
Solution 2 - PostgresqlThavaprakash SwaminathanView Answer on Stackoverflow
Solution 3 - PostgresqlMaosheng WangView Answer on Stackoverflow
Solution 4 - PostgresqlErik VullingsView Answer on Stackoverflow
Solution 5 - PostgresqlKARPOLANView Answer on Stackoverflow
Solution 6 - PostgresqlSolidSnakeView Answer on Stackoverflow
Solution 7 - PostgresqlAfshin GhaziView Answer on Stackoverflow
Solution 8 - PostgresqlAleksandr MakovView Answer on Stackoverflow
Solution 9 - PostgresqlAmid GolView Answer on Stackoverflow
Solution 10 - PostgresqlSunny GoelView Answer on Stackoverflow
Solution 11 - PostgresqlHaroon KhalidView Answer on Stackoverflow
Solution 12 - PostgresqlhizmarckView Answer on Stackoverflow
Solution 13 - PostgresqlmeyjView Answer on Stackoverflow
Solution 14 - PostgresqlEverett ToewsView Answer on Stackoverflow
Solution 15 - PostgresqlAndrei KonstantinovView Answer on Stackoverflow
Solution 16 - PostgresqlRafael Paes LemeView Answer on Stackoverflow
Solution 17 - Postgresqlalex-shefView Answer on Stackoverflow
Solution 18 - PostgresqlSergei DubininView Answer on Stackoverflow
Solution 19 - PostgresqlAndrei BacescuView Answer on Stackoverflow
Solution 20 - PostgresqlNiyongabo EricView Answer on Stackoverflow
Solution 21 - PostgresqlMuhammad Faizan FareedView Answer on Stackoverflow
Solution 22 - PostgresqlRajitha BhanukaView Answer on Stackoverflow
Solution 23 - PostgresqlPayam KhaninejadView Answer on Stackoverflow
Solution 24 - PostgresqlRaúl LGView Answer on Stackoverflow