Backup and restore PostgreSQL databases to S3-compatible storages.
  • Shell 78.1%
  • Dockerfile 21.9%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Romein van Buren db6589e17b
Some checks failed
Build and push image / build-and-push-image (3.17, 15, postgresql-client) (push) Has been cancelled
Build and push image / build-and-push-image (3.24, 16, postgresql16-client) (push) Has been cancelled
Build and push image / build-and-push-image (3.24, 17, postgresql17-client) (push) Has been cancelled
Build and push image / build-and-push-image (3.24, 18, postgresql18-client) (push) Has been cancelled
Build and push image / build-and-push-image (3.16, 14, postgresql-client) (push) Has been cancelled
Update README.md
2026-10-04 07:47:48 +02:00
.github/workflows Update distros, remove old versions 2026-10-03 18:49:45 +02:00
src Try fix builds for newer Postgres versions 2026-10-02 09:50:33 +02:00
.dir-locals.el add .dir-locals.el 2022-09-25 13:46:26 -04:00
.dockerignore add docker-compose.yaml for development/testing 2022-07-03 13:43:54 -04:00
.env.example Fork, add compatibility for PostgreSQL v18 2026-07-31 11:58:41 +02:00
.gitignore Fork, add compatibility for PostgreSQL v18 2026-07-31 11:58:41 +02:00
docker-compose.yaml Fork, add compatibility for PostgreSQL v18 2026-07-31 11:58:41 +02:00
Dockerfile Fix ARG order 2026-10-03 18:33:13 +02:00
LICENSE.txt Fork, add compatibility for PostgreSQL v18 2026-07-31 11:58:41 +02:00
README.md Update README.md 2026-10-04 07:47:48 +02:00

docker-postgres-s3-backup

This project provides Docker images to periodically back up a PostgreSQL database to AWS S3, and to restore from the backup as needed. It is forked from docker-postgres-backup-s3 and updated to support the latest PostgreSQL versions.

Usage

Backup

services:
  postgres:
    image: postgres:18
    volumes:
      - postgres:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password

  backup:
    image: code.smartyellow.net/sy/postgres-s3-backup:18
    environment:
      SCHEDULE: '@weekly'     # optional
      BACKUP_KEEP_DAYS: 7     # optional
      PASSPHRASE: passphrase  # optional
      S3_REGION: region
      S3_ACCESS_KEY_ID: key
      S3_SECRET_ACCESS_KEY: secret
      S3_BUCKET: my-bucket
      S3_PREFIX: backup
      POSTGRES_HOST: postgres
      POSTGRES_DATABASE: dbname
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
  • Images are tagged by the major PostgreSQL version supported: 12, 13, 14, 15 or 16.
  • The SCHEDULE variable determines backup frequency. See go-cron schedules documentation here. Omit to run the backup immediately and then exit.
  • If PASSPHRASE is provided, the backup will be encrypted using GPG.
  • Run docker exec <container_name> sh backup.sh to trigger a backup ad-hoc.
  • If BACKUP_KEEP_DAYS is set, backups older than this many days will be deleted from S3.
  • Set S3_ENDPOINT if you're using a non-AWS S3-compatible storage provider.

Restore

Caution

DATA LOSS! All database objects will be dropped and re-created.

... from latest backup

docker exec <container_name> sh restore.sh

Note

If your bucket has more than a 1000 files, the latest may not be restored -- only one S3 ls command is used

... from specific backup

docker exec <container_name> sh restore.sh <timestamp>

Development

Build the image locally

ALPINE_VERSION determines Postgres version compatibility. See build-and-push-images.yml for the latest mapping.

DOCKER_BUILDKIT=1 docker build --build-arg ALPINE_VERSION=3.24 .

Run a simple test environment with Docker Compose

cp .env.example .env
# fill out your secrets/params in .env
docker compose up -d

Acknowledgements

This project is an update of the excellent eeshugerman/postgres-backup-s3, which in turn is a fork and re-structuring of schickling/postgres-backup-s3 and schickling/postgres-restore-s3.

Copyright (c) 2017 Johannes Schickling

Copyright (c) 2022 Elliott Shugerman

Copyright (c) 2026 Romein van Buren

Licensed under the MIT license.