Reputation: 2467
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.
Upvotes: 235
Views: 323402
Reputation: 15421
docker ps
(shows the container is running, the port and the container ID)Note that the container ID is 192319224ecc
and that's what we'll use in the next steps.
docker inspect 192319224ecc | grep -i postgres_db
(returns the DB)docker inspect 192319224ecc | grep -i postgres_user
(returns the username)docker inspect 192319224ecc | grep -i postgres_password
(returns the password)I'm able to connect to it just fine
Upvotes: 0
Reputation: 6976
docker run \
-p 5432:5432 \
--name container-postgresdb \
-e POSTGRES_PASSWORD=admin \
-d postgres
docker run \
-p 5050:80 \
-e "[email protected]" \
-e "PGADMIN_DEFAULT_PASSWORD=admin" \
-d dpage/pgadmin4
Enter PgAdmin on localhost:80
. Then add a server with:
name: container-postgresdb
host: host.docker.internal
database: postgres
user: postgres
password: admin
You can also use this to find out the host address (it will be listed as IPAddress
in the output):
docker inspect container-postgresdb \
-f "{{json .NetworkSettings.Networks }}"
This other article might help with more info.
Upvotes: 206
Reputation: 157
if you're using docker-compose and the pgadmin and postgres containers are on the same (docker-compose) network, instead of specifying the host as localhost or 127.0.0.1, you have to use the name of your postgres service
ex.
docker-compose.yml
services:
mydb:
image: postgres
networks:
- my_network
myadmin:
image: pgadmin
networks:
- my_network
then in the connection interface of pgadmin, for hostname you put "mydb"
Upvotes: 0
Reputation: 743
Not sure how many people this is going to help but I had to stop the currently running database from my windows machine. Once I did it I was able to connect to postgres database running in container
Navigate to "C:\Program Files\PostgreSQL\15\bin" if you can run "pg_ctl" command
Run below command
.\pg_ctl.exe -D "C:\Program Files\PostgreSQL\15\data" stop
Hope this helps
Upvotes: 0
Reputation: 99
Have running postgres and pgadmin docker containers in on my windows machine using following docker compose :-
services: postgresql:
container_name: postgresql
image: postgres
environment:
POSTGRES_USER: ayushhh
POSTGRES_PASSWORD: ayushhh
PGDATA: /data/postgres
volumes:
- postgres:/data/postgres
ports:
- "5432:5432"
networks:
- postgres
restart: unless-stopped pgadmin:
container_name: pgadmin
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:
- "5050:80"
networks:
- postgres
restart: unless-stopped
and have used host => host.docker.internal
Upvotes: 3
Reputation: 2786
in my case just try to see the container name by docker ps
then just
then docker inspect 311753dcc4bf
which 311753dcc4bf id
Upvotes: 0
Reputation: 613
Go to your container terminal on Docker Desktop and type hostname -I
in case is linux to get the ip assigned to this machine, then go to your pgAdmin an try it out. @Rigoxls
Upvotes: 2
Reputation: 49150
Here are the full steps that worked for me
Download and install pgadmin GUI tool
Run docker container: docker-compose up my-db
.
From this command logs, note down ipv4 address
and port
. In my case, it's 0.0.0.0
and 5432
.
docker-compose.yml
file and note down POSTGRES PASSWORDpgadmin gui
In connection tab:
ipv4 address
in Hostname/address
port
POSTGRES PASSWORD
in password
Upvotes: 4
Reputation: 1261
pgAdmin-4: version 6.12
I tried several answers here and in other places but nothing worked for me.
Here is the problem I had and the solution. I had a docker postgres running my machine and need to connect this server in pgAdmin.
All I need to do was to check the docker information and fill the server configs based on that in pgAdmin.
You can do this by opening your docker and going to dashboard and then selecting the postgres image you're using. There is a tab called Inspect
click on that. Here you can get all the information about that postgres container.
Now open the pgAdmin
and resister a server by right clicking on the servers -> Register -> Server.
choose a name for the server and click Connection
tab.
Here we need to fill the data like host name/address, IP, ports and etc.
In docker Inspect
tab, there is Ports
section that you can get this data from, something like this:
So your host address based on this picture is 172.0.0.1
and port is 5873
.
Other info like database, user and password is also available in Environment
section in docker Inspect
tab.
Now fill the other information click save
in pgAdmin and it should work.
Upvotes: 0
Reputation: 31
What I have done success on macOS Monterrey running Docker Desktop for macOS(M1):
docker pull postgres
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
pgAdmin 4: Connection postgres-server
Upvotes: 3
Reputation: 7996
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
Upvotes: 7
Reputation: 842
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
Upvotes: 1
Reputation: 3748
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.
Upvotes: 1
Reputation: 316
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
Upvotes: 5
Reputation: 17
If local host port 5432 already in use by another psql servers, change it when creating the container and in Pgadmin.
Upvotes: 2
Reputation: 1395
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
Upvotes: 3
Reputation: 1561
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
Upvotes: 155
Reputation: 325
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.
Upvotes: 13
Reputation: 2132
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.
Upvotes: 13
Reputation: 3595
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
Upvotes: 100
Reputation: 7282
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.
Upvotes: 2
Reputation: 10946
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
The Hostname/address used above is the name of the Postgres container given by --name pg
Upvotes: 4
Reputation: 21
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
Upvotes: 2
Reputation: 155
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: How to get a Docker container's IP address from the host
Upvotes: 8
Reputation: 1529
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
Upvotes: 44
Reputation: 736
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 '[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.
Upvotes: 6
Reputation: 2990
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:
Upvotes: 27
Reputation: 1012
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
Run pgAdmin 4 create new server, and input as following Host: 127.0.0.1 Port: 5432 User name: user password: password123
Upvotes: 77
Reputation: 649
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: Connecting pgadmin to postgres in docker
Upvotes: 0
Reputation: 2938
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.
Upvotes: 22