Volume-Daten zwischen Hosts migrieren - Container-Daten umziehen
Volume-Daten zwischen Hosts migrieren - Container-Daten umziehen
Einen Container von Server A nach Server B umziehen ist einfach – die Daten mitzunehmen erfordert etwas mehr Sorgfalt.
Vorbereitung: Container stoppen
Immer zuerst den Container stoppen bevor man Daten kopiert. Läuft eine Datenbank während des Exports, können die Daten inkonsistent sein.
docker compose stop app db
Methode 1: tar-Export und -Import
Die universellste Methode funktioniert mit jedem Volume-Typ.
Auf dem Quell-Host exportieren:
# Volume-Inhalt als tar.gz archivieren
docker run --rm \
-v myvolume:/data \
-v $(pwd):/backup \
alpine tar czf /backup/volume-backup.tar.gz -C /data .
Das erzeugt volume-backup.tar.gz im aktuellen Verzeichnis. Die Datei auf den Ziel-Host übertragen:
scp volume-backup.tar.gz user@zielserver:/tmp/
Auf dem Ziel-Host importieren:
# Ziel-Volume anlegen
docker volume create myvolume
# Daten einspielen
docker run --rm \
-v myvolume:/data \
-v /tmp:/backup \
alpine tar xzf /backup/volume-backup.tar.gz -C /data
Danach Container starten und prüfen ob alles stimmt.
Methode 2: rsync über den Host-Pfad
Wenn man direkten Zugriff auf den Host-Pfad hat (z.B. als root):
# Mountpoint ermitteln
docker volume inspect myvolume --format '{{.Mountpoint}}'
# → /var/lib/docker/volumes/myvolume/_data
# Mit rsync zum Zielserver synchronisieren
rsync -avz --progress \
/var/lib/docker/volumes/myvolume/_data/ \
user@zielserver:/var/lib/docker/volumes/myvolume/_data/
Das Ziel-Volume muss vorher existieren. Diese Methode eignet sich gut für inkrementelle Synchronisierungen.
Methode 3: Datenbank-Dump (bevorzugt für DBs)
Für Datenbanken ist immer der native Dump-Mechanismus die sicherste Wahl. Er ist konsistent, portabel und unabhängig vom Speicher-Backend.
PostgreSQL:
# Dump auf dem Quell-Host
docker exec -t mypostgres pg_dumpall -U postgres > dump.sql
# Wiederherstellen auf dem Ziel-Host
cat dump.sql | docker exec -i mypostgres psql -U postgres
MySQL/MariaDB:
# Dump
docker exec mydb mysqldump -u root -psecret --all-databases > dump.sql
# Wiederherstellen
cat dump.sql | docker exec -i mydb mysql -u root -psecret
MongoDB:
docker exec mymongo mongodump --archive --gzip > mongo-backup.gz
cat mongo-backup.gz | docker exec -i mymongo mongorestore --archive --gzip
Welche Methode wählen?
| Szenario | Methode |
|---|---|
| Datenbank (MySQL, Postgres, Mongo) | Nativer Dump |
| Beliebige Dateien/Upload-Ordner | tar-Export |
| Regelmäßige Synchronisierung | rsync |
| Volumes auf NFS/Cloud-Backend | Backend direkt nutzen |
Integrität prüfen
Nach dem Import nicht vergessen zu prüfen:
# Container starten und Logs beobachten
docker compose up -d
docker compose logs -f db
Für Datenbanken: Tabellen zählen, wichtige Datensätze manuell kontrollieren, Applikation testen.