This article will demonstrate how to run the PostgreSQL database service in a Docker container. Docker lets you run software in isolated environments that encapsulate specific configurations, software versions and dependencies separate from your main system (and each other). This makes it very useful for running multiple versions of the same program. There are many other reasons why you may wish to run PostgreSQL in a container – from ensuring consistency between systems, and running a version of PostgreSQL that is not available in your package manager.
To use Docker, you’ll need to install it on your Linux system, as we detail in our instructions here.
Running a PostgreSQL Database Server in Docker
Once you have installed Docker, you can start pulling images (downloading the image from an image repository). Images are by default pulled from Docker’s public repository on Docker Hub.
Docker has an official PostgreSQL image which can be pulled by running:
docker pull postgres
Pulling a Specific Version of PostgreSQL
Docker images are organized by tags – labels that usually include the version of the primary software in the container, or other notable attributes of it such as additional packages that may be included.
By default, pulling an image will pull the most recent version, tagged latest.
To install a specific version of PostgreSQL, find the image on Docker Hub and click on the ‘View Available Tags‘ button – you’ll get a full list of available images for all versions of PostgreSQL, and the name of the image for that version. For example, to install PostgreSQL 15 specifically, run:
docker pull postgres:15
Running a Docker Image After Pulling It
Once the PostgreSQL image has been pulled (again, Docker lingo for downloaded)m it can be run using the following command:
docker run --name SERVER_NAME -e POSTGRES_PASSWORD=USER_PASSWORD -d postgres
Note that the following values should be replaced:
- SERVER_NAME is a unique name for identifying running the PostgreSQL server container
- USER_PASSWORD should be the password for the postgres user which will be used to connect to the server
More information can be found in the PostgreSQL documentation.
Connecting to the PostgreSQL Server Running in Docker
By default, the container will map it’s internal PostgreSQL port to the default PostgreSQL port on the local system (5432). Connect using the (psql command)[https://www.linuxscrew.com/postgresql-how-to-connect]:
psql -h localhost -p 5432 -U postgres
Stopping and Removing Docker Containers
Once you have finished with your database, the container can be stopped:
docker stop postgres
If you want to free up resources, you can also completely delete/destroy the container. WARNING, THIS WILL REMOVE ANY DATA YOU STORED IN THE DATABASES HOSTED ON THE POSTGRESQL SERVER WITHIN THE CONTAINER:
docker rm postgres
Where is My Data Stored When Working With Docker Containers?
By default, data (including PostgreSQL databases and their contents) are stored inside the container, and will be deleted with it if it is removed or recreated.
If you want your data to persist after removing a docker container, you will need to configure it to store data outside of the container – we cover how to do this in our article here.