#!/usr/bin/env bash
# ==========================================================================
# restore_docker_rsync.sh
# • Spielt einen rsync-Snapshot zurück, der von backup_docker_rsync.sh
# erzeugt wurde. (Volumes + Docker-Config + Compose-Dateien)
# • Standard-Ziel: / (also Original-Orte)
# • Standard-Snapshot: latest (kann via -s <timestamp> gewählt werden)
# • Optionale --dry-run (nur anzeigen, nichts ändern)
# ==========================================================================
set -euo pipefail
# ---------- Variablen ----------------------------------------------------
BACKUP_ROOT="/mnt/Backup/Docker"
SNAP="latest"
DRYRUN=""
# ---------- Usage --------------------------------------------------------
usage() {
cat <<EOF
Usage: $0 [-s SNAPSHOT] [--dry-run]
-s, --snapshot Timestamp-Verzeichnis (z.B. 2025-06-06-1557) oder 'latest'
--dry-run Keine Änderungen; zeige nur, was passieren würde
EOF
exit 1
}
# ---------- Argumente parsen --------------------------------------------
while [[ $# -gt 0 ]]; do
case $1 in
-s|--snapshot) SNAP="$2"; shift 2 ;;
--dry-run) DRYRUN="--dry-run"; shift ;;
-h|--help) usage ;;
*) echo "Unbekannter Parameter $1"; usage ;;
esac
done
SNAPDIR="$BACKUP_ROOT/$SNAP"
[[ -d "$SNAPDIR" ]] || { echo "Snapshot $SNAPDIR existiert nicht!" ; exit 1; }
echo " === Docker RESTORE === "
echo " Snapshot : $SNAPDIR"
[[ -n $DRYRUN ]] && echo " Modus : DRY-RUN (keine Änderungen)"
read -rp "Fortfahren? [yes/no] " CONFIRM
[[ $CONFIRM == "yes" ]] || { echo "Abbruch." ; exit 0; }
# ---------- 1) Docker stoppen -------------------------------------------
echo "[*] Stoppe Docker-Dienst ..."
systemctl stop docker
# ---------- 2) Volumes zurückspielen ------------------------------------
echo "[*] Stelle Volumes wieder her ..."
rsync -a $DRYRUN --delete \
"$SNAPDIR/volumes/" /var/lib/docker/volumes/
# ---------- 3) Docker-Config zurückspielen ------------------------------
echo "[*] Stelle Docker-Konfiguration wieder her ..."
rsync -a $DRYRUN --delete \
"$SNAPDIR/etc-docker/" /etc/docker/
if [[ -d "$SNAPDIR/docker-systemd" ]]; then
rsync -a $DRYRUN --delete \
"$SNAPDIR/docker-systemd/" /etc/systemd/system/docker.service.d/
fi
# ---------- 4) Compose-Dateien zurückspielen ----------------------------
echo "[*] Stelle Compose-Dateien wieder her ..."
rsync -a $DRYRUN "$SNAPDIR/metadata/compose/" /
# ---------- 5) Dienste starten ------------------------------------------
echo "[*] Starte Docker neu ..."
systemctl daemon-reload
systemctl start docker
# ---------- 6) Stacks hochfahren ----------------------------------------
echo "[*] Starte alle Compose-Stacks ..."
find /data/compose -maxdepth 2 -name 'docker-compose*.yml' -execdir docker compose up -d \;
echo "=== Restore abgeschlossen ==="