DEV Community

Cover image for Run PostgreSQL + PGAdmin  in pods using podman

Posted on • Updated on

Run PostgreSQL + PGAdmin in pods using podman

To learn SQL, I decided to use postgreSQL and pgAdmin.
Now I had 2 options install it the simple way on my linux machine, or let's learn podman some more.

So I decided to use pods to keep both postgres and pgadmin together and I won't need to restart each separately.

1. Create a pod:

podman pod create --name learn-sql -p 9876:80
Enter fullscreen mode Exit fullscreen mode

Output will be similar to this:

pr0PM at ~  
podman pod create --name=learn-sql -p 9876:80
pr0PM at ~  
podman pod ps
bdef801c5678  learn-sql  Created  6 seconds ago  665b4a4b687c  1
Enter fullscreen mode Exit fullscreen mode

This will create a pod that will house both our containers in podman and manage them.
We exposed port 9876 in the pod and map it to port 80 that we will use to access the pgadmin UI.

2. Create and run the pgadmin and postgres container inside the pod we just created:

podman run --pod=learn-sql \
-e '' \
--name pgadmin12 \  # name the container
-d dpage/pgadmin4   # the image we are pulling
Enter fullscreen mode Exit fullscreen mode

Ignore the silly creds there and note that we had already mapped the port 80 while creating the pod.

podman run --pod=learn-sql \
-v ~/your/data/volume:/var/lib/postgresql/data:Z \
-e POSTGRES_USER=pr0pm \
--name db \
-d postgres
Enter fullscreen mode Exit fullscreen mode

Note: Use :Z in the end to modify the SELinux label in fedora 33 or you might be greeted with permission error, you might not need it if your distro doesn't follows SELinux by default.

3. View the current status of the containers running in your pod:

podman pod stats learn-sql

and results will look something like this:

POD           CID           NAME                CPU %  MEM USAGE/ LIMIT   MEM %  NET IO   BLOCK IO  PIDS
bdef801c5678  12dfba476985  pgadmin12           1.44%  171.1MB / 4.079GB  4.20%  -- / --  -- / --   11
bdef801c5678  665b4a4b687c  bdef801c5678-infra  3.00%  749.6kB / 4.079GB  0.02%  -- / --  -- / --   1
bdef801c5678  81422268e4d7  db                  8.00%  46.41MB / 4.079GB  1.14%  -- / --  -- / --   7
Enter fullscreen mode Exit fullscreen mode

4. Configure pgadmin to use postgres

Fire up your browser and head to

Use the credentials you used while making the pgadmin container in the previous steps to login and you will be greeted with a screen like this:


Now click on the Add Server button and you will be presented with a menu like similar to the one below

Enter a name for your DB server and move to the next tab where you will add the host address, port, username and password.

Save it and connect to the running postgres container in the pod and check out your containerised postgres + pgadmin instance on your PC.

5. Useful operations

You can perform start/stop pause/unpause operations on the pod to work/resume/stop and all the data will remain persistent in our volume.

To pause/unpause the pod

podman pod pause learn-sql
podman pod unpause learn-sql
Enter fullscreen mode Exit fullscreen mode

To start stop the pod

podman pod start learn-sql
podman pod stop learn-sql
Enter fullscreen mode Exit fullscreen mode

If you wish to to generate the config with all the stuff ready for you to reproduce later

podman generate kube learn-sql >> learn-sql-pod-conf.yml
Enter fullscreen mode Exit fullscreen mode

That's it, until next time.

Top comments (1)

chchrist profile image
Tolis Christomanos • Edited

Thank you for this article!

I encountered two problems.

I can't mount the local folder. This is a know issue apparently discussed here

I can't get it to work from the cli with psql. I exposed 5432 as well but it does nothing...
Fixed I exposed the port correctly -p 5432:5432