Files
wiki/Catalogue-Self-Hosted/apps/app-docker-volume-backup.md
T
2026-06-09 18:40:21 +02:00

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.daily ou weekly
  • Backups pré/post-hook : exécuter une commande dans un conteneur (ex : pg_dump avant, redis-cli BGSAVE aprè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 : /health pour 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

  1. Choisir sa destination : local pour débuter, S3 pour la résilience.
  2. Créer le fichier backup_env avec les credentials (chmod 600).
  3. Lancer le conteneur et vérifier les logs : docker logs docker-volume-backup.
  4. Annoter les stacks à backuper avec les labels docker-volume-backup.daily / .weekly / .monthly.
  5. Tester un backup manuel : docker exec docker-volume-backup backup.
  6. 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_PASSWORD doit ê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 le docker-compose.yml versionné. Utiliser env_file avec 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

Pages Liées