Docker Compose PostgreSQL server


In one container start the Docker server, the other one will be the client that is built based on the Dockerfile


examples/postgresql/docker-compose.yml
version: '3.8'
services:
  client:
    build: .
    volumes:
    - .:/opt
    links:
    - postgres
    command: tail -f /dev/null
  postgres:
    image: postgres:latest
    environment:
      POSTGRES_USER: username
      POSTGRES_PASSWORD: password
      POSTGRES_DB: mydb
    volumes:
      - database-data:/var/lib/postgresql/data/

volumes:
  database-data:

The Dockerfile is also based on the official mongodb image as that made it easy to have mongosh already installed.


examples/postgresql/Dockerfile
FROM ubuntu:22.04
RUN apt-get update && \
    apt-get install -y curl && \
    apt-get install -y inetutils-ping && \
    apt-get install -y postgresql-client && \
    echo DONE

Start the two containers:


docker-compose up -d

Connect to the client container:


docker exec -it mongodb_client_1 bash


psql -h postgres --username username -d mydb

It will ask for a password:


Password for user username:

type in password


psql (14.5 (Ubuntu 14.5-0ubuntu0.22.04.1), server 15.1 (Debian 15.1-1.pgdg110+1))
WARNING: psql major version 14, server major version 15.
         Some psql features might not work.
Type "help" for help.

mydb=#

Alternativel, once inside the clien docker container we can put the variable of the database in an environment variable and then we can run a command that will not wait for any input.


export PGPASSWORD=password
echo "SELECT CURRENT_TIME" | psql -h postgres -U username mydb