Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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

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:
      - postgres-database-data:/var/lib/postgresql/data/

volumes:
  postgres-database-data:

The Dockerfile is built on top of a plain Ubuntu image

FROM ubuntu:23.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 postgresql_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 client 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