docker postgres pgadmin local connection
PostgresqlDockerPgadminPostgresql 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:
-
Pull postgres image from Docker Hub
docker pull postgres:latest
-
Run the container using the below command
docker run -p 5432:5432 postgres
-
Using docker's inspect command find the IP
-
Use that IP, PORT, Username, and Password to connect in PGADMIN
-
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:
- Pull the latest postgres
docker pull postgres:latest
- run the postgres containner:
docker run -d -e POSTGRES_USER=user -e POSTGRES_PASSWORD=password123 --name db-my -p 5432:5432 --restart=always postgres
- 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
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:
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
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:
-
docker inspect my_container_id_postgreSQL
-
The network assigned to PostgreSQL was:
"Networks": { "docker_default": { "IPAddress": "172.18.0.2", ... } }
-
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
-
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
- Click Add New Server
- Create - Server
- Name: db
- Hostname/address: pg
- Username: postgres
- Password: pg123
- 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.
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
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):
- Pull the latest postgres:
docker pull postgres
- Run the postgres container:
docker run -d -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres --name postgres-server -p 5432:5432 --restart=always postgres
-
Then installed the latest version of pgAdmin 4 (macOS) from pgadmin website
-
Run pgAdmin 4 create new server, and input as following Host: 127.0.0.1 Port: 5432 User name:
postgres
password:postgres