Der Docker Backup Manager ist eine Lösung, um Docker-Volumes zu sichern und wiederherzustellen.
2.0K
Der Docker Backup Manager ist eine spezialisierte Lösung, um Docker-Volumes sicher zu sichern und wiederherzustellen. Das Tool löst das Problem inkonsistenter Daten, indem es Container während des Backups stoppt und anschließend automatisch wieder startet.
Es bietet zwei Betriebsmodi:
Da das Tool Docker-Befehle an den Host weitergibt, ist ein korrektes Mapping der Pfade lebenswichtig.
Der Pfad für die Backups MUSS auf dem Host und im Container identisch sein. Wenn du auf dem Host /opt/backup-data nutzt, muss dieser im Container ebenfalls als /opt/backup-data gemountet werden.
Beispiel docker-compose.yml:
services:
backup-manager:
image: alcapone1933/docker-volume-backup:latest
container_name: docker-backup-manager
restart: unless-stopped
ports:
- "8085:8080"
volumes:
# WICHTIG: Zugriff auf Docker auf dem Host
- /var/run/docker.sock:/var/run/docker.sock
# Ort für die Konfiguration (config.json)
- ./app_data:/app/data
# Host-Pfad und Container-Pfad MÜSSEN identisch sein:
- /opt/backup-volume:/opt/backup-volume
environment:
- TZ=Europe/Berlin
- APP_PORT=8080
- APP_DATA=/app/data
- APP_VOLUMES_BACKUP=/opt/backup-volume
- APP_DEBUG=false
- HOSTNAME=docker-volume-backup
| Variable | Standardwert | Beschreibung |
|---|---|---|
APP_PORT | 8080 | Port für das Web-Interface. |
APP_DATA | /app/data | Speicherort der config.json. |
APP_VOLUMES_BACKUP | /opt/backup-volume | Pflicht: Zielpfad (Host & Container identisch). |
APP_DEBUG | false | Aktiviert detaillierte Docker-Logs. |
HOSTNAME | docker-backup-manager | Verhindert, dass der Manager sich selbst stoppt. |
| Kombination | Verhalten |
|---|---|
| Keine Env | Tool nutzt das eingebettete CSS/HTML. Läuft komplett offline. |
APP_DEBUG=true | Docker-Befehle werden geloggt. Web-UI kommt weiterhin aus der Binary. |
APP_WEB_DEBUG=true | Web-UI wird live aus dem Ordner ./web geladen (ideal zum Designen). |
| Hinter Proxy | Tool erkennt Pfade wie /mein-tool/api/... automatisch, da sie relativ sind. |
Wenn du dich im Container befindest oder das Programm direkt aufrufst, nutzt du den Befehl docker-backup-manager. Das Programm erkennt die Flags und führt die Aktion sofort aus.
Syntax: docker-backup-manager [AKTION] [OPTIONEN]
--backup : Sichert Volumes laut Web-UI Auswahl.--backup-all : Sichert restlos alle auf dem System gefundenen Volumes.--restore : Wiederherstellung markierter Volumes aus dem letzten Backup.--restore-all : Alles aus einem Datums-Ordner wiederherstellen.--vols "v1,v2" : Liste der Volumes (kommagetrennt).--res-date "DATE" : Zeitstempel für Restore (z.B. 2024-12-24_03-00).--res-delete yes/no : Inhalt vor Restore löschen (Standard: yes).--ignore-con : Container während der Aktion NICHT stoppen.--stop-con "c1,c2" : Nur diese spezifischen Container stoppen.--config [PFAD] : Pfad zur config.json überschreiben.--port [PORT] : Web-Server Port ändern.--b-dir [PFAD] : Backup-Pfad überschreiben.--version : Zeigt die installierte Version.1. Vollständiges System-Backup: Sichert alle Volumes und stoppt alle betroffenen Container.
docker-backup-manager --backup-all
2. Gezielte Sicherung mit Container-Filter:
Sichert nur db_data und stoppt dabei nur den Container mariadb_server.
docker-backup-manager --backup --vols "db_data" --stop-con "mariadb_server"
3. Hot-Backup (Keine Downtime): Sichert alle Volumes, ohne Container zu stoppen (Achtung bei Datenbanken!).
docker-backup-manager --backup-all --ignore-con
4. Backup mit spezieller Konfiguration: Verwendet eine alternative Konfigurationsdatei.
docker-backup-manager --backup --config "/app/data/prod_backup.json"
5. Einzelnes Volume wiederherstellen:
Spielt das letzte Backup für das Volume nextcloud_files ein.
docker-backup-manager --restore --vols "nextcloud_files"
6. Disaster Recovery (Zeitpunkt-Wiederherstellung): Stellt alle Volumes auf den Stand vom 20. Dezember 2024 um 03:00 Uhr zurück.
docker-backup-manager --restore-all --res-date "2024-12-20_03-00"
7. Restore ohne Datenverlust im Ziel: Stellt Daten bereit, löscht aber vorhandene Dateien im Ziel-Volume nicht vorher.
docker-backup-manager --restore --vols "app_data" --res-delete no
Um das Programm im Container vom Host aus zu steuern, nutzt du:
# Täglich um 03:00 Uhr Voll-Backup
0 3 * * * docker exec docker-backup-manager /usr/local/bin/docker-backup-manager --backup-all >> /var/log/docker-backup.log 2>&1
Behalte immer nur die neuesten 30 Backups, um Speicherplatz zu sparen:
#!/bin/bash
BACKUP_PATH="/opt/backup-volume"
KEEP=30
cd "$BACKUP_PATH" || exit
ls -dt */ | tail -n +$((KEEP + 1)) | xargs -I {} rm -rf "{}"
echo "Cleanup durchgeführt: Nur die neuesten $KEEP Ordner wurden behalten."
backup-host.sh)Dieses Skript wird direkt auf deinem Linux-Server (Host) ausgeführt. Es nutzt die native Geschwindigkeit der Go-Binärdatei und kümmert sich im Anschluss sofort um die Speicherbereinigung (Rotation).
#!/bin/bash
# ==============================================================================
# Docker Backup Manager - Host Automation Script
# ==============================================================================
# 1. PFADE DEFINIEREN
# Pfad zur kompilierten Go-Binärdatei
APP_BIN="/usr/local/bin/docker-backup-manager"
# Absoluter Pfad zum Backup-Verzeichnis auf deinem Server
BACKUP_DIR="/opt/backup-volume"
# Wie viele Backup-Ordner (Zeitstempel) sollen behalten werden?
KEEP_BACKUPS=30
# ------------------------------------------------------------------------------
echo "------------------------------------------------------------"
echo "🚀 Start der Backup-Automatisierung: $(date '+%Y-%m-%d %H:%M:%S')"
echo "------------------------------------------------------------"
# SCHRITT 1: Backup ausführen
# Nutzt --backup-all für eine komplette System-Sicherung.
echo "📦 Starte docker-backup-manager..."
$APP_BIN --backup-all --b-dir "$BACKUP_DIR"
# Rückgabewert prüfen (0 = Erfolg)
if [ $? -eq 0 ]; then
echo "✅ Backup-Lauf erfolgreich beendet."
else
echo "❌ FEHLER: Das Backup-Programm wurde unerwartet abgebrochen!"
exit 1
fi
# SCHRITT 2: Bereinigung (Rotation)
echo "🧹 Starte Bereinigung (Behalte die neuesten $KEEP_BACKUPS Backups)..."
if [ -d "$BACKUP_DIR" ]; then
cd "$BACKUP_DIR" || exit
# Logik: Sortiert nach Datum, behält die neuesten X und löscht den Rest.
ls -dt */ | tail -n +$((KEEP_BACKUPS + 1)) | xargs -I {} rm -rf "{}"
echo "✅ Bereinigung abgeschlossen."
else
echo "⚠️ HINWEIS: Backup-Verzeichnis nicht gefunden. Cleanup übersprungen."
fi
echo "------------------------------------------------------------"
echo "🏁 Gesamtvorgang abgeschlossen am: $(date '+%Y-%m-%d %H:%M:%S')"
echo "------------------------------------------------------------"
Um die Backups vollautomatisch im Hintergrund laufen zu lassen, nutzt du unter Linux den Dienst cron.
Speichere den obigen Code in einer Datei (z. B. /home/user/scripts/backup-host.sh) und mache sie ausführbar:
chmod +x /home/user/scripts/backup-host.sh
Öffne den Editor für deine Benutzer-Crontab:
crontab -e
Füge am Ende der Datei eine Zeile hinzu. Hier sind gängige Beispiele:
0 3 * * * /bin/bash /home/user/scripts/backup-host.sh >> /var/log/docker-backup.log 2>&1
0 */12 * * * /bin/bash /home/user/scripts/backup-host.sh >> /var/log/docker-backup.log 2>&1
Erklärung der Syntax:
0 3 * * *: Minute (0), Stunde (3), Tag, Monat, Wochentag./bin/bash ...: Der Pfad zum Skript.>> /var/log/docker-backup.log 2>&1: Schreibt alle Ausgaben und Fehler in eine Logdatei, damit du später prüfen kannst, ob alles geklappt hat.Content type
Image
Digest
sha256:46f61b1a5…
Size
31.4 MB
Last updated
8 months ago
docker pull alcapone1933/docker-volume-backup