Ich kann keine Möglichkeit finden, Docker-Container von einem Host auf einen anderen zu verschieben.
Kann ich meine Container auf irgendeine Weise in Repositorys verschieben, wie wir es für Bilder tun? Derzeit verwende ich keine Datenmengen, um die Daten zu speichern, die Anwendungen zugeordnet sind, die in Containern ausgeführt werden. Einige Daten befinden sich also in Containern, die ich beibehalten möchte, bevor ich das Setup neu entwerfe.
docker
containers
docker-registry
Dinesh Reddy
quelle
quelle
docker save
dient zum Speichern von Bildern, nicht von Containern. docs.docker.com/engine/reference/commandline/saveAntworten:
Sie können einen laufenden Docker-Container nicht von einem Host auf einen anderen verschieben.
Sie können die Änderungen in Ihrem Container in ein Image mit übernehmen
docker commit
, das Image auf einen neuen Host verschieben und dann einen neuen Container mit startendocker run
. Dadurch bleiben alle Daten erhalten, die Ihre Anwendung im Container erstellt hat.Nb: Es werden keine Daten gespeichert, die in Volumes gespeichert sind. Sie müssen Datenmengen manuell auf einen neuen Host verschieben.
quelle
docker stop x
; 2. Änderungen vornehmendocker commit -p x x
; 3. Speichern Sie den Container im Bilddocker save -o x x
. 4. Verschieben Sie die x-Datei auf den neuen Host und laden Sie auf dem neuen Host das neue Imagedokcer load -i x
(wenn Sie den Container mit der-v
Option gestartet haben, müssen Sie diese Dateien auch auf den neuen Host verschieben). 5. Führen Sie dieses Bild mitdocker run (-v is required to mount these files if needed)
Alternativ, wenn Sie nicht in ein Repository pushen möchten:
Exportieren Sie den Container in einen Tarball
Bewegen Sie Ihren Tarball auf eine neue Maschine
Importieren Sie es zurück
quelle
Was nach vielen verwirrenden Handbüchern und verwirrenden Tutorials schließlich für mich funktioniert hat, da Docker offensichtlich zum Zeitpunkt meines Schreibens einen Blick auf überhöhte Erwartungen wirft , ist:
docker save image_name > image_name.tar
cat image_name.tar | docker load
Beim Exportieren und Importieren, wie in anderen Antworten vorgeschlagen, werden keine Ports und Variablen exportiert, die möglicherweise für die Ausführung Ihres Containers erforderlich sind. Und Sie könnten Dinge wie "Kein Befehl angegeben" usw. erhalten, wenn Sie versuchen, es auf einen anderen Computer zu laden.
Der Unterschied zwischen Speichern und Exportieren besteht darin, dass der Befehl Speichern das gesamte Bild mit Verlauf und Metadaten speichert, während der Befehl export nur die Dateistruktur exportiert (ohne Verlauf oder Metadaten).
Es ist unnötig zu erwähnen, dass, wenn Sie diese Ports bereits auf dem Docker-Hypervisier, das Sie importieren, von einem anderen Docker-Container übernommen haben, Sie in einen Konflikt geraten und exponierte Ports neu konfigurieren müssen.
quelle
Aus der Docker-Dokumentation:
quelle
Verwenden Sie dieses Skript: https://github.com/ricardobranco777/docker-volumes.sh
Dies tut Daten in Mengen erhalten.
Anwendungsbeispiel:
quelle
Ich habe viele Lösungen dafür ausprobiert, und diese hat bei mir funktioniert:
1.commit / speichern Container in neuem Image:
# Docker Stop
# Docker Commit CONTAINER_NAME
# Docker speichern - Ausgabe IMAGE_NAME.tar IMAGE_NAME: TAG
ps: "Unser Container CONTAINER_NAME hat ein gemountetes Volume unter '/ var / home'" (Sie müssen Ihren Container überprüfen, um seinen Volume-Pfad anzugeben: # docker inspect CONTAINER_NAME)
# mkdir backup
# docker run --rm --volumes-from CONTAINER_NAME -v $ {pwd} / backup: / backup ubuntu bash -c "cd / var / home && tar cvf /backup/volume_backup.tar".
Wenn Sie sich nun $ {pwd} / backup ansehen, finden Sie unser Volume im Tar-Format.
Bis jetzt haben wir das Bild 'IMAGE_NAME.tar' unseres Conatainers und dessen Volume 'volume_backup.tar'.
Jetzt können Sie denselben alten Container auf einem neuen Host neu erstellen.
quelle