8.5 KiB
title: Docker Volume Backup created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, docker, container, backup, volume, s3, ssh, cron] confidence: high contested: false sources: [https://selfh.st/apps/?tag=Docker, https://github.com/offen/docker-volume-backup]
🐳 Docker Volume Backup
Le backup automatisé de volumes Docker multi-destinations — S3, SSH, local, exécuté en cron dans un conteneur léger.
📋 Informations Générales
| Champ | Valeur |
|---|---|
| Site web | offen.github.io/docker-volume-backup |
| GitHub | offen/docker-volume-backup |
| License | MIT |
| Langage | Go |
| Étoiles GitHub | 3,6k ⭐ |
| Dernière MAJ | 2026-06-07 |
| Catégorie | cat-docker |
📝 Description
Docker Volume Backup (souvent appelé offen/docker-volume-backup) est un conteneneur utilitaire dont le seul rôle est de sauvegarder régulièrement les volumes Docker de votre homelab vers une destination au choix : local, S3 (AWS, MinIO, Backblaze B2, Wasabi, Scaleway…), SSH (rsync sur un serveur distant), ou WebDAV. Conçu par les mainteneurs de Offen (suite d'analytics self-hosted), il est devenu un standard de la communauté.
Chaque sauvegarde crée une archive tar.gz horodatée (avec un nom explicite du conteneur et du volume), et applique automatiquement une rotation (garder les N dernières, supprimer les plus vieilles). L'outil supporte les backups incrémentaux via restic et le chiffrement AES-256 au repos.
- ✅ Backups automatisés par cron interne (configurable)
- ✅ Multi-destinations : local, S3, SSH/SFTP, WebDAV (et combos)
- ✅ Multi-volumes : un ou plusieurs volumes par conteneur
- ✅ Backups par labels :
docker-volume-backup.dailyouweekly - ✅ Backups pré/post-hook : exécuter une commande dans un conteneur (ex :
pg_dumpavant,redis-cli BGSAVEaprès) - ✅ Chiffrement : AES-256 natif (clé passphrase ou KMS)
- ✅ Compression : tar.gz par défaut, niveau ajustable
- ✅ Rotation : garder N sauvegardes, purger les vieilles
- ✅ Intégration restic : backups incrémentaux + déduplication
- ✅ Healthcheck endpoint :
/healthpour monitoring
Public cible : tout homelab qui veut des backups automatiques de ses données (BDD, configs, volumes persistants) sans écrire un script bash maison. Particulièrement pertinent pour ceux qui ont déjà un S3 ou un NAS pour stocker les archives.
Alternatives directes : borgbackup + cron (plus puissant, plus complexe), restic standalone (incrémental), Tugtainer (UI web + scheduling), Repliqate (modulaire, plus jeune), scripts bash maison.
🚀 Installation
Option 1 : Docker Compose (recommandé)
# docker-compose.yml
version: '3.8'
services:
docker-volume-backup:
image: offen/docker-volume-backup:latest
container_name: docker-volume-backup
restart: unless-stopped
security_opt:
- no-new-privileges:true
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /var/lib/docker/volumes:/volumes:ro # accès aux volumes Docker
- /etc/docker-volume-backup:/archive # dossier local des backups
- ./backup_env:/env:ro # fichier d'env (credentials S3/SSH)
env_file:
- ./backup_env
labels:
- "docker-volume-backup.daily=true" # ne s'applique qu'à ce conteneur, voir labels plus bas
volumes:
# mounts partagés vers les conteneurs à backuper (exemples) :
# pgdata:/source/postgres:ro
Option 2 : Annotations sur vos stacks (la magie des labels)
# Sur la stack à backuper, ajouter ces labels :
services:
postgres:
image: postgres:16
volumes:
- pgdata:/var/lib/postgresql/data
labels:
- "docker-volume-backup.daily=true"
- "docker-volume-backup.pre-hook=postgres pg_dump -U app mydb > /tmp/dump.sql"
- "docker-volume-backup.post-hook=rm -f /tmp/dump.sql"
nextcloud:
image: nextcloud:28
volumes:
- nc_data:/var/www/html
labels:
- "docker-volume-backup.weekly=true"
- "docker-volume-backup.exclude=__pycache__"
Fichier backup_env (credentials S3)
# ./backup_env
BACKUP_CRON_DAILY="0 3 * * *" # tous les jours à 3h
BACKUP_CRON_WEEKLY="0 4 * * 0" # tous les dimanches à 4h
# Destination S3 (ex : Backblaze B2, Scaleway, MinIO…)
BACKUP_S3_BUCKET="my-backups"
AWS_ACCESS_KEY_ID="..."
AWS_SECRET_ACCESS_KEY="..."
AWS_S3_ENDPOINT="https://s3.fr-par.scw.cloud"
AWS_REGION="fr-par"
# Chiffrement
BACKUP_ARCHIVE_PASSWORD="..PASSWORD..."
# Rotation
BACKUP_RETENTION_DAYS="7"
BACKUP_PRUNING_PREFIX="backup-"
⚙️ Configuration Initiale
- Choisir sa destination : local pour débuter, S3 pour la résilience.
- Créer le fichier
backup_envavec les credentials (chmod 600). - Lancer le conteneur et vérifier les logs :
docker logs docker-volume-backup. - Annoter les stacks à backuper avec les labels
docker-volume-backup.daily/.weekly/.monthly. - Tester un backup manuel :
docker exec docker-volume-backup backup. - Vérifier la restauration sur un autre hôte — un backup non testé n'est pas un backup.
🔄 Alternatives
Open Source
- BorgBackup — Déduplication, chiffrement, plus puissant (mais CLI)
- Restic — Incrémental, S3/SSH, très mature
- Duplicati — UI web, multi-destinations (mais pas Docker-native)
- Tugtainer — UI web, scheduling fin, plus récent
- Repliqate — Backup modulaire, plugins
- Kopia — UI + CLI, snapshots chiffrés
- rclone — Outil CLI de sync multi-cloud
- Wal-G — Backups PostgreSQL/MySQL/Mongo
Propriétaires
- Duplicacy (modèle licence) — Déduplication cloud
- Veeam — Enterprise backup
- Acronis — Cloud backup
- Backblaze B2 + Cloudflare R2 — Stockage (pas backup en soi)
- Arq Backup — Mac/Win
- Carbonite — Cloud backup
Tableau comparatif
| Critère | Docker Volume Backup | Restic | BorgBackup | Tugtainer | Duplicati |
|---|---|---|---|---|---|
| Docker-native | ✅ | ⚠️ CLI | ⚠️ CLI | ✅ | ⚠️ |
| UI web | ❌ | ⚠️ (restic UI tiers) | ⚠️ (Vorta, Pika) | ✅ | ✅ |
| Multi-destination | ✅ (S3, SSH, local) | ✅ | ✅ | ✅ | ✅ |
| Incrémental | ✅ (via restic) | ✅ | ✅ | ✅ | ✅ |
| Chiffrement | ✅ AES-256 | ✅ AES-256 | ✅ AES-256 | ✅ | ✅ |
| Labels Docker | ✅ | ❌ | ❌ | ✅ | ❌ |
| Hooks pre/post | ✅ | ⚠️ via wrapper | ⚠️ via wrapper | ⚠️ | ⚠️ |
| Licence | MIT | BSD-2 | BSD-3 | MIT | LGPL |
Verdict : Docker Volume Backup est imbattable pour sa niche : un sidecar léger qui scanne vos conteneurs par labels et sauvegarde automatiquement. Pour des backups plus complexes (déduplication avancée, snapshots distants), Restic ou BorgBackup en CLI sont plus adaptés.
🔐 Sécurité
- ⚠️ Le socket Docker monté (même en
:ro) permet de lister les volumes et de lire leurs chemins. Réseau isolé recommandé : ne pas exposer ce conteneur. - Chiffrement obligatoire des archives :
BACKUP_ARCHIVE_PASSWORDdoit être une passphrase forte (20+ caractères, stockée dans un coffre-fort, ex : app-bitwarden). - Credentials en fichiers
chmod 600: jamais de clé AWS en clair dans ledocker-compose.ymlversionné. Utiliserenv_fileavec un fichier non commité. - Destination chiffrée aussi : S3 doit être chiffré at-rest (configuré au niveau bucket).
- Test de restauration trimestriel : un backup jamais restauré est suspect. Faire des drills réguliers sur un hôte de test.
- Règle 3-2-1 : 3 copies, 2 supports, 1 hors-site. Exemple : backup local + S3 B2 + cron de copie vers un serveur distant (ou vice-versa).
📚 Ressources
- GitHub offen/docker-volume-backup
- Documentation officielle
- Exemples de stacks annotées
- Discussion sur les labels
Pages Liées
- cat-docker — Catégorie Docker
- app-portainer — Pour superviser
- app-traefik — Reverse proxy
- observabilite — Vérifier que les backups marchent
- securisation-home-lab — Stratégie 3-2-1
- recettes-docker-compose — Templates Compose