Doku/Backup Docker: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Die Seite wurde neu angelegt: „= Docker-Backups im Homelab = Diese Seite beschreibt die komplette Einrichtung und Funktionsweise des Scripts <code>backup_docker_rsync.sh</code>, mit dem alle Docker-Volumes, Compose-Dateien und die Docker-Daemon-Konfiguration täglich auf das QNAP-NAS gesichert werden. ; Repository <code>/usr/local/sbin/backup_docker_rsync.sh</code> (lokal) ; Zielpfad NAS <code>/mnt/Backup/Docker/YYYY-MM-DD-HHMM</code> ⇒ Symlink '''latest''' == 1 Voraussetzu…“ |
|||
| Zeile 80: | Zeile 80: | ||
== 7 Wiederherstellung == | == 7 Wiederherstellung == | ||
*Siehe [[ | *Siehe [[Docker]]* | ||
Kurzfassung für „latest“: | Kurzfassung für „latest“: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
Version vom 6. Juni 2025, 17:19 Uhr
Docker-Backups im Homelab
Diese Seite beschreibt die komplette Einrichtung und Funktionsweise des Scripts
backup_docker_rsync.sh, mit dem alle Docker-Volumes, Compose-Dateien
und die Docker-Daemon-Konfiguration täglich auf das QNAP-NAS gesichert werden.
- Repository
/usr/local/sbin/backup_docker_rsync.sh (lokal)
- Zielpfad NAS
/mnt/Backup/Docker/YYYY-MM-DD-HHMM ⇒ Symlink latest
1 Voraussetzungen
- **Ubuntu 22.04 LTS** (Root-Zugriff)
- NAS-Share unter
/mnt/Backupgemountet- Empfohlen**: NFS (+
no_root_squash).
- Empfohlen**: NFS (+
SMB/CIFS funktioniert mit den rsync-Optionen --no-owner --no-group.
- Pakete:
apt install rsync jq2 Script herunterladen
curl -o /usr/local/sbin/backup_docker_rsync.sh \
https://<dein-git>/backup_docker_rsync.sh
chmod +x /usr/local/sbin/backup_docker_rsync.sh2.1 Wichtige Variablen im Kopfbereich
| Variable | Standardwert | Bedeutung |
|---|---|---|
SNAPROOT |
/mnt/Backup/Docker |
Ablageort der Snapshots |
RETENTION_DAYS |
7 |
Aufbewahrung (ältere Snapshots werden gelöscht) |
COMPOSE_BASE |
/data/compose |
Oberordner der Compose-Stacks |
3 Cron Job (täglich 02:30 Uhr)
# crontab -e (als root)
30 2 * * * /usr/local/sbin/backup_docker_rsync.sh \
>> /var/log/backup_docker.log 2>&1- Logging: Alle Ausgaben in
/var/log/backup_docker.log. - Bei Fehlercodes ≠0 wird der Cron-MTA eine Mail an root schicken (sofern konfiguriert).
4 Funktionsweise
- **Metadaten-Dump** (Docker info, Container-/Image-Listen, Compose-YAMLs).
- **Nur noch laufende Container** werden kurz mit
docker pauseeingefroren. - **rsync Snapshot**
* Hard-Links via--link-dest→ jede Sicherung „Vollkopie“, aber nur Deltas belegen Platz. * Ohne-o -g⇒ kompatibel mit SMB/NFS-Shares.
- **Unpause** der zuvor laufenden Container (Cleanup-Trap gewährleistet dies selbst bei Abbruch).
- **latest-Symlink** wird aktualisiert, alte Snapshots nach
RETENTION_DAYSgelöscht. - **Rechte 755/644** auf neuem Snapshot → Windows-Benutzer können per SMB browsen.
5 Snapshot-Struktur
/mnt/Backup/Docker/
└── 2025-06-06-0230/
├── volumes/ # kompletter Inhalt von /var/lib/docker/volumes
├── etc-docker/ # /etc/docker
├── docker-systemd/ # systemd-Drop-Ins (falls vorhanden)
└── metadata/
├── docker-info.txt
├── images.txt
├── containers.txt
└── compose/… # alle docker-compose*.yml
latest -> 2025-06-06-0230
6 Manueller Testlauf
/usr/local/sbin/backup_docker_rsync.sh
echo $?
# → 0 = Erfolg7 Wiederherstellung
- Siehe Docker*
Kurzfassung für „latest“:
restore_docker_rsync.sh -s latest8 Troubleshooting
| Meldung | Ursache / Lösung |
|---|---|
--link-dest arg does not exist |
Erster Lauf → ignorieren. |
Operation not permitted (chown) |
SMB-Share ohne Chown-Rechte → OK; Daten wurden trotzdem kopiert. |
Container bleiben paused |
Script vor v1.1; aktualisieren ODER manuell
|
| Windows kann nicht lesen | Fs-Rechte → Script ≥v1.2 setzt 755/644
oder Share mit
|
9 Versionshistorie
| Datum | Version | Änderung |
|---|---|---|
| 2025-06-06 | 1.2 | Rechtefix (755/644), robustes Unpause, Link-Dest-Check |
| 2025-06-05 | 1.1 | Pausiere nur laufende Container, Cleanup-Trap |
| 2025-06-04 | 1.0 | Erste produktive Version |
Seite zuletzt aktualisiert: 06 Juni 2025