wake-up-neo.com

Wie verschieben Sie Docker-Container zwischen verschiedenen Hosts?

Ich finde keine Möglichkeit, Docker-Container, die Container ausführen, von einem Host auf einen anderen zu verschieben.

Gibt es eine Möglichkeit, meine Container in Repositorys zu verschieben, wie wir es für Images tun? Derzeit benutze ich keine Daten-Volumes, um die Daten zu speichern, die mit Anwendungen verbunden sind, die in Containern ausgeführt werden. Einige Daten befinden sich also in Containern, die ich vor der Neugestaltung des Setups beibehalten möchte.

67
Dinesh Reddy

Sie können einen laufenden Docker-Container nicht von einem Host auf einen anderen verschieben.

Sie können die Änderungen in Ihrem Container mit docker commit an ein Bild übergeben, das Bild auf einen neuen Host verschieben und dann einen neuen Container mit docker run starten. Dadurch bleiben alle Daten erhalten, die Ihre Anwendung innerhalb des Containers erstellt hat.

Nb: Es werden keine Daten gespeichert, die in Volumes gespeichert sind. Sie müssen die Datenmengen manuell auf den neuen Host verschieben.

39
larsks

alternativ, wenn Sie nicht in ein Repository pushen möchten:

1) Exportieren Sie den Container in ein Tarball

     docker export <CONTAINER ID> > /home/export.tar

2) Verschieben Sie Ihr Archiv auf eine neue Maschine

3) Importiere es zurück

     cat /home/export.tar | docker import - some-name:latest
71
aholt

Was schließlich für mich funktionierte, nach vielen verwirrenden Handbüchern und verwirrenden Tutorials, da sich Docker offensichtlich zum Zeitpunkt meines Schreibens bei Blick auf überhöhte Erwartungen

  1. Speichern Sie das Docker-Image im Archiv:
    docker save image_name > image_name.tar 
  2. auf einem anderen Rechner kopieren 
  3. führen Sie auf dieser anderen Docker-Maschine das Laden des Dockers folgendermaßen aus:
    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. Möglicherweise landen Sie unter anderem mit "Kein Befehl angegeben" etc ... Wenn Sie versuchen, es auf einem anderen Computer zu laden.

Der Unterschied zwischen Speichern und Export besteht also darin, dass der Befehl zum Speichern das gesamte Bild mit Verlauf und Metadaten speichert, während der Befehl Export nur die Dateistruktur (ohne Verlauf oder Metadaten) exportiert.

16

Aus der Docker-Dokumentation:

docker export exportiert nicht den Inhalt der zugehörigen Volumes mit dem Behälter. Wenn ein Volume auf einem vorhandenen .__ montiert ist. Verzeichnis im Container, docker export exportiert den Inhalt des zugrundeliegenden -Verzeichnisses, nicht des Inhalts des Volumes. Verweisen in Sichern, Wiederherstellen oder Migrieren von Daten Volumes Im Benutzerhandbuch finden Sie Beispiele zum Exportieren von Daten in einem Volume.

Andere externe Tools: Um einen Container mit dem zugehörigen Datenvolumen zu verschieben, können Sie Flocker https://clusterhq.com/flocker/introduction/ verwenden.

14

Ich habe viele Lösungen dafür ausprobiert, und dies ist die, die für mich funktioniert hat:

1.Behälter in neuem Bild speichern/festschreiben:

  1. ++ Festschreiben des Containers:
    # docker stop
    # docker commit CONTAINER_NAME
    # docker save --output IMAGE_NAME.tar IMAGE_NAME: TAG


ps: "Unser Container CONTAINER_NAME hat ein bereitgestelltes Volume unter '/ var/home'" (Sie müssen Ihren Container überprüfen, um seinen Volume-Pfad anzugeben: # docker inspect CONTAINER_NAME)

  1. ++ Speichere das Volumen: Wir werden ein Ubuntu-Image verwenden, um die Sache zu erledigen.
    # mkdir backup
    # docker run --rm --volumes-from CONTAINER_NAME -v $ {pwd}/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.
Bisher haben wir das Image unseres Conatainers 'IMAGE_NAME.tar' und dessen Volume 'volume_backup.tar'.

Jetzt können Sie denselben alten Container auf einem neuen Host neu erstellen.

0
Houssam Ezzoukh

Verwenden Sie dieses Skript: https://github.com/ricardobranco777/docker-volumes.sh

Dieses behält Daten in Volumes.

Verwendungsbeispiel:

# Stop the container   
docker stop $CONTAINER

# Create a new image   
docker commit $CONTAINER $CONTAINER

# Save image
docker save -o $CONTAINER.tar $CONTAINER

# Save the volumes (use ".tar.gz" if you want compression)
docker-volumes.sh $CONTAINER save $CONTAINER-volumes.tar

# Copy image and volumes to another Host
scp $CONTAINER.tar $CONTAINER-volumes.tar [email protected]$Host:

# On the other Host:
docker load -i $CONTAINER.tar
docker create --name $CONTAINER [<PREVIOUS CONTAINER OPTIONS>] $CONTAINER

# Load the volumes
docker-volumes.sh $CONTAINER load $CONTAINER-volumes.tar

# Start container
docker start $CONTAINER
0
Ricardo Branco