Backup Bot II: This Time It's Easily Configurable
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Go to file
Philipp Rothmann 92dfd23b26
continuous-integration/drone/push Build is passing Details
feat: backupvolume can be pruned after upload
3 weeks ago
.drone.yml fix push docker image to correct destination 1 year ago
.env.sample feat: backupvolume can be pruned after upload 3 weeks ago
.envrc.sample Bash command line handling showdown 1 year ago
.gitignore Ignore testing folder 1 year ago
Dockerfile chore(deps): update docker docker tag to v19.03.15 2 months ago Merge branch 'main' into multi_path 1 year ago feat: backupvolume can be pruned after upload 3 weeks ago
compose.s3.yml Work-in-progress: split S3 & SSH storage 1 year ago
compose.ssh.yml Working cron again, d'oh 1 year ago
compose.swarm-cronjob.yml fix typo 1 year ago
compose.yml feat: backupvolume can be pruned after upload 3 weeks ago
renovate.json chore(deps): add renovate.json 2 months ago Revert to previous, probably-working cron set-up 1 year ago

Backupbot II

Build Status

This Time, It's Easily Configurable

Automatically take backups from running Docker Swarm services into a volume.


There are lots of Docker volume backup systems; all of them have one or both of these limitations:

  • You need to define all the volumes to back up in the configuration system
  • Backups require services to be stopped to take consistent copies

Backupbot II tries to help, by

  1. letting you define backups using Docker labels, so you can easily collect your backups for use with another system like docker-volume-backup.
  2. running pre- and post-commands before and after backups, for example to use database tools to take a backup from a running service.


With Co-op Cloud

  1. Set up Docker Swarm and abra
  2. abra app new backup-bot-two
  3. abra app config <your-app-name>, and set storage options. Either configure CRON_SCHEDULE, or set up swarm-cronjob
  4. abra app secret generate <your-app-name> restic-password v1, optionally with --pass before <your-app-name> to save the generated secret in pass.
  5. abra app secret insert <your-app-name> ssh-key v1 ... or similar, to load required secrets.
  6. abra app deploy <your-app-name>
  • Category: Utilities
  • Status: 0, work-in-progress
  • Image: thecoopcloud/backup-bot-two, 4, upstream
  • Healthcheck: No
  • Backups: N/A
  • Email: N/A
  • Tests: No
  • SSO: N/A


Like Traefik, or swarm-cronjob, Backupbot II uses access to the Docker socket to read labels from running Docker Swarm services:

        backupbot.backup: "true"
        backupbot.backup.pre-hook: 'mysqldump -u root -p"$(cat /run/secrets/db_root_password)" -f /tmp/dump/dump.db' "rm -rf /tmp/dump/dump.db"
        backupbot.backup.path: "/tmp/dump/,/etc/foo/"
  • backupbot.backup -- set to true to back up this service (REQUIRED)
  • backupbot.backup.path -- comma separated list of file paths within the service to copy (REQUIRED)
  • backupbot.backup.pre-hook -- command to run before copying files (optional)
  • -- command to run after copying files (optional)

As in the above example, you can reference Docker Secrets, e.g. for looking up database passwords, by reading the files in /run/secrets directly.


  1. Install direnv
  2. cp .envrc.sample .envrc
  3. Edit .envrc as appropriate, including setting DOCKER_CONTEXT to a remote Docker context, if you're not running a swarm server locally.
  4. Run ./ -- you can add the --skip-backup or --skip-upload options if you just want to test one other step