/db-dump-s3

Dockerfile for scheduled postgres dumps and upload to s3 or other s3-compatible service.

Primary LanguageShell

pg-dump-s3

Dockerfile for scheduled postgres dumps and upload to s3.

Usage

Building the Image

docker build --build-arg "POSTGRES_IMAGE_TAG=13.5" -t pg_dump_s3 .

It takes POSTGRES_IMAGE_TAG as a build arg so that the postgres version in this image can match the version you want a backup from. Thats necessary because pg_dump works best on databases with the same postgres version.

See the Tested images section for a list of images that should work.

Starting the Container

docker run \
  -e DB_URL=<your_db_url> \
  -e PG_DUMP_ARGS=<pg_dump_args>
  -e BUCKET_NAME=<your_bucket_name> \
  -e FILE_PREFIX=<file_prefix> \
  -e AWS_ACCESS_KEY_ID=<your_aws_key_id> \
  -e AWS_SECRET_ACCESS_KEY=<your_aws_secret_key> \
  -e AWS_DEFAULT_REGION=aws_region=<your_aws_region> \
  -e CRON_SCHEDULE=<crontab_schedule> \
  pg_dump_s3

Env Vars

Name Example Value Required
DB_URL postgres:://user:pwd@localhost:5432/db_name yes
PG_DUMP_ARGS --schema=public no
BUCKET_NAME pg_dump_bucket yes
FILE_PREFIX my_db_dump- no
AWS_ACCESS_KEY_ID 123456789 yes
AWS_SECRET_ACCESS_KEY ASDFGHJKL yes
AWS_DEFAULT_REGION eu-central-1 yes
CRON_SCHEDULE * * * * * yes

See https://crontab.guru/examples.html for more CRON_SCHEDULE example values.

Tested Postgres Images

It uses official postgres images from https://hub.docker.com/_/postgres.

The dockerfile allows to specify the image tag with a build arg, e.g. POSTGRES_IMAGE_TAG=14.1. It's not granted that it'll work with all image tags (e.g. *-alpine images don't work).

I tested the dockerfile with a few tags. Feel free to open a PR if you want to edit the list.

Image Tag Works
14.1
14.1-bullseye
14.1-alpine 🚫
13.5
12.9
11.14
10.19
9.6