Connect from local machine to PostgreSQL database in Docker
Docker makes it very easy to spin up a PostgreSQL database management system. With the following command it’s possible to start your PostgreSQL Docker container on your server or local machine.
$ docker run -d -p 5432:5432 --name my-postgres -e POSTGRES_PASSWORD=mysecretpassword postgres
This command will start a PostgreSQL database and map ports using the following pattern:
Port 5432 of our container will be mapped on port 5432 of our host or server.
Access the container on your host or server. We will create a database inside our PostgreSQL container.
$ docker exec -it my-postgres bash
Now you are ‘inside’ your container. We can access postgres and create the database.
root@cb9222b1f718:/# psql -U postgres
psql (10.3 (Debian 10.3-1.pgdg90+1))
Type "help" for help.
postgres=# CREATE DATABASE mytestdb;
We are finished. You can exit your container (
\q) and go to your local machine. Here you need some PostgreSQL Client tool installed:
- PSQL (CLI)
My PostgreSQL container is running on my local machine which explains why I’m connecting with localhost. If it’s running on a specific server, use your server IP. (For Windows docker-machine you probably need to use 192.168.99.100).
$ psql -h localhost -p 5432 -U postgres -W Password for user postgres:
psql (9.5.5, server 10.3 (Debian 10.3-1.pgdg90+1)) WARNING: psql major version 9.5, server major version 10. Some psql features might not work.
Type "help" for help. postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype |
mytestdb | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
| | | | |
template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
| | | | |
After authenticating you’ll see the mytestdb is in the list of available databases. Now you can connect with your database using
For a tool like PgAdmin you can define your connection. Also here you have to replace localhost with your server IP if your container is running elsewhere.
Save the connection and you’re able to connect to the database which is running in your PostgreSQL Docker container!
This post was based on a popular SO answer I gave. Hope it helps!