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: -p <host_port>:<container_port>
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;
CREATE DATABASE
postgres=#\q

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)
  • PgAdmin

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 |
| | | | |
(4 rows)

After authenticating you’ll see the mytestdb is in the list of available databases. Now you can connect with your database using \c .

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.

Create a server connection
Define your connection

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!