Backup and restore Docker named volumes with S3 upload and retention
2.3K
Backup and restore Docker named volumes with one command. Supports scheduled backups, S3 upload, retention policies, and container stop/start around backup windows.
docker-compose down -v deletes all your data. A corrupted volume is gone forever. Docker has zero built-in volume backup. This image fixes that.
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ./backups:/backup \
-e VOLUMES=myapp_data,myapp_db \
zachbg/docker-volume-backup:latest
services:
vol-backup:
image: zachbg/docker-volume-backup:latest
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./backups:/backup
environment:
VOLUMES: myapp_data,myapp_db
SCHEDULE: 21600
RETENTION_DAYS: 7
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ./backups:/backup \
-e RESTORE_FILE=myapp_db_20250115_120000.tar.gz \
-e RESTORE_VOLUME=myapp_db \
zachbg/docker-volume-backup:latest restore
| Variable | Default | Description |
|---|---|---|
VOLUMES | Comma-separated volume names to backup | |
LABEL | vol-backup.enable | Or use labels to select volumes |
BACKUP_DIR | /backup | Local backup directory |
SCHEDULE | Backup interval in seconds (empty = one-shot) | |
COMPRESS | true | Gzip compress backups |
TIMESTAMP | true | Add timestamp to filenames |
RETENTION_DAYS | 7 | Delete backups older than N days |
STOP_CONTAINERS | Comma-separated containers to stop during backup | |
S3_BUCKET | Upload backups to S3/R2 | |
S3_PREFIX | docker-volumes | S3 key prefix |
AWS_ENDPOINT_URL | Custom S3 endpoint | |
PRE_HOOK | Command to run before backup | |
POST_HOOK | Command to run after backup | |
WEBHOOK_URL | Notification webhook |
environment:
VOLUMES: postgres_data
STOP_CONTAINERS: postgres
SCHEDULE: 86400
environment:
VOLUMES: app_data
S3_BUCKET: my-backups
AWS_ACCESS_KEY_ID: xxx
AWS_SECRET_ACCESS_KEY: xxx
AWS_ENDPOINT_URL: https://account.r2.cloudflarestorage.com
SCHEDULE: 21600
services:
vol-backup:
image: zachbg/docker-volume-backup:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./backups:/backup
volumes:
app_data:
labels:
vol-backup.enable: "true"
cache_data:
# This volume won't be backed up
Content type
Image
Digest
sha256:93ba46fc2…
Size
53.1 MB
Last updated
6 months ago
docker pull zachbg/docker-volume-backup