Je ne trouve pas le moyen de déplacer un conteneur en cours d'exécution d'un hôte à un autre.
Existe-t-il un moyen de transférer mes conteneurs dans des référentiels comme nous le faisons pour les images? Certaines données se trouvent donc dans des conteneurs, ce que je veux conserver avant de redéfinir la configuration.
Vous ne pouvez pas déplacer un conteneur de menu fixe en cours d'exécution d'un hôte à un autre.
Vous pouvez valider les modifications apportées au conteneur dans une image avec docker commit
, déplacer l'image sur un nouvel hôte, puis démarrer un nouveau conteneur avec docker run
. Cela préservera toutes les données créées par votre application dans le conteneur.
Nb: Il ne conserve pas les données stockées dans les volumes; vous devez déplacer manuellement les volumes de données vers un nouvel hôte.
sinon, si vous ne souhaitez pas utiliser Push vers un référentiel:
docker export <CONTAINER ID> > /home/export.tar
cat /home/export.tar | docker import - some-name:latest
Ce qui a finalement fonctionné pour moi, après de nombreux manuels déroutants et des tutoriels déroutants, puisque Docker est évidemment au moment où j'écris à un aperçu des attentes exagérées , est la suivante:
docker save image_name > image_name.tar
cat image_name.tar | docker load
L'exportation et l'importation, comme proposé dans d'autres réponses, n'exportent pas les ports et les variables pouvant être nécessaires à l'exécution de votre conteneur. Et vous pourriez vous retrouver avec des choses comme "Aucune commande spécifiée" etc ... lorsque vous essayez de le charger sur une autre machine.
Donc, la différence entre enregistrer et exporter réside dans le fait que la commande save enregistre l’ensemble de l’image avec l’historique et les métadonnées, tandis que la commande export n’exporte que la structure des fichiers (sans historique ni métadonnées).
De la documentation Docker:
docker export
n'exporte pas le contenu des volumes associés avec le conteneur. Si un volume est monté sur un fichier existant répertoire dans le conteneur,docker export
exportera le contenu du répertoire sous-jacent, pas le contenu du volume. Référer vers Sauvegarder, restaurer ou migrer des données volumes dans le guide de l’utilisateur pour des exemples d’exportation de données dans un volume.
Autres outils externes: Pour déplacer un conteneur avec son volume de données associé, vous pouvez utiliser Flocker https://clusterhq.com/flocker/introduction/
J'ai essayé beaucoup de solutions pour cela, et c'est celle qui a fonctionné pour moi:
1.commit/save conteneur à la nouvelle image:
ps: "Notre conteneur CONTAINER_NAME a un volume monté dans '/ var/home'" (vous devez inspecter votre conteneur pour spécifier son chemin de volume: # docker inspecter CONTAINER_NAME)
Maintenant, lorsque vous regardez $ {pwd}/backup, vous trouverez notre volume au format tar.
Jusqu'à présent, nous avons l'image de notre conatainer 'IMAGE_NAME.tar' et son volume 'volume_backup.tar'.
Maintenant, vous pouvez recréer le même ancien conteneur sur un nouvel hôte.
Utilisez ce script: https://github.com/ricardobranco777/docker-volumes.sh
Ceci conserve les données en volumes.
Exemple d'utilisation:
# 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 $USER@$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