Docker Container zwischen 2 Hosts verschieben

Einige Admins standen sicherlich schon öfter vor der Herausforderung, einen Docker-Container zwischen 2 Hosts zu verschieben, sei es weil auf einem der Speicher zu knapp wird oder weil der alte Server zu langsam ist.

Das geht glücklicherweise unter Docker mit wenigen Befehlen. Es wird lediglich etwas freier Speicher, eine Netzwerkverbindung zwischen beiden Hosts und etwas Geduld benötigt.

Hinweis

Wenn der Docker-Container persistenten Speicher eingebunden hat, müssen Sie dessen Inhalt gesondert übertragen.

Ich verwende hier als Beispiel für den Container den Namen Nextcloud, um die Befehle anschaulicher zu machen. Ersetzen Sie den Namen einfach durch den Namen Ihres Containers.

Quellserver

Um einen Docker-Container zu verschieben muss dieser zuerst heruntergefahren werden um einen konsistenten Stand zu erhalten und Datenverlust zu vermeiden.

Führen Sie also den folgenden Befehl aus um den Docker-Container zu stoppen:

docker stop nextcloud

Im nächsten Schritt müssen Sie alle offenen Dateien im Container commitet werden. Das geht mit dem folgenden Befehl:

docker commit -p=false nextcloud nextcloud-export

Hierbei erzeugen Sie auf dem Server ein neues Image mit den Namen nextcloud-export. Darin enthalten sind alle Dateien, die im Ursprungs-Container enthalten waren, auch manuell angepasste. Wie oben erwähnt sind keine persistenten Speicher in das neue Image übertragen.

Im nächsten Schritt müssen Sie den Container speichern. Hierzu legen Sie mit folgendem Befehl eine komprimierte Datei an:

docker save nextcloud-export | gzip > nextcloud-export.tar.gz

Die entstandene Datei können Sie nun beliebig übertragen.

Zielserver

Nachdem Sie komprimierte Datei auf den Zielserver übertragen haben, können Sie diese entpacken und direkt im Docker als Image registrieren. Führen Sie dazu folgenden Befehl aus:

gunzip -c nextcloud-export.tar.gz | docker load

Im Anschluss ist das Image geladen und der Container kann gestartet werden. Führen Sie dazu den folgenden Befehl aus:

docker run -d --name=nextcloud --publish 80:80 nextcloud-export

Nun wird der Docker mit dem Namen nextcloud gestartet und der Port 80 freigegeben. Wenn Sie einen anderen Port nutzen können Sie diesen einfach austauschen. Als Image wird das eben importierte Image nextcloud-export genutzt.

Das war der komplette Umzug. Der Container läuft nun auf dem neuen Server.

Das sind Ihnen zu viele Befehle? Sie können auch einfach die folgende Zeilen kopieren und ausschließlich den Namen am Anfang und die IP des Zielservers ändern:

Quellserver:
name=nextcloud; docker stop $name; docker commit -p $name $name-export; docker save $name-export | gzip > $name-export.tar.gz; scp $name-export.tar.gz root@[Zielserver]:/tmp/; docker rmi $name-export; rm $name-export.tar.gz

Zielserver:
name=nextcloud; cd /tmp/; gunzip -c $name-export.tar.gz | docker load; docker run -d --name=$name --publish 80:80 $name-export

Hinweis: Etwaige notwendige Firewallanpassungen und DNS Anpassungen sind ebenfalls noch zu beachten.

Benötigen Sie Unterstützung mit Ihrer Docker-Umgebung? Kontaktieren Sie uns einfach für ein erstes unverbindliches Gespräch.

Sascha Jelinek