Je ne trouve pas de moyen de déplacer les conteneurs exécutant le docker d'un hôte à un autre.
Existe-t-il un moyen de pousser mes conteneurs vers des référentiels comme nous le faisons pour les images? Actuellement, je n'utilise pas de volumes de données pour stocker les données associées aux applications exécutées dans des conteneurs. Ainsi, certaines données résident dans des conteneurs, que je souhaite conserver avant de redéfinir la configuration.
docker
containers
docker-registry
Dinesh Reddy
la source
la source
docker save
sert à enregistrer des images, pas des conteneurs. docs.docker.com/engine/reference/commandline/saveRéponses:
Vous ne pouvez pas déplacer un conteneur Docker en cours d'exécution d'un hôte à un autre.
Vous pouvez valider les modifications de votre conteneur dans une image avec
docker commit
, déplacer l'image sur un nouvel hôte, puis démarrer un nouveau conteneur avecdocker run
. Cela conservera toutes les données créées par votre application à l'intérieur du conteneur.Nb: il ne conserve pas les données stockées dans des volumes; vous devez déplacer manuellement les volumes de données vers un nouvel hôte.
la source
docker stop x
; 2. commettez vos changementsdocker commit -p x x
; 3. enregistrez le conteneur dans l'imagedocker save -o x x
; 4. déplacez le fichier x vers le nouvel hôte et dans le nouvel hôte, chargez la nouvelle imagedokcer load -i x
(si vous-v
démarrez le conteneur avec l' option, vous devrez également déplacer ces fichiers vers le nouvel hôte); 5. exécuter cette image avecdocker run (-v is required to mount these files if needed)
Sinon, si vous ne souhaitez pas pousser vers un référentiel:
Exporter le conteneur vers une archive tar
Déplacez votre archive sur une nouvelle machine
Importez-le
la source
Ce qui a finalement fonctionné pour moi, après beaucoup de manuels déroutants et de didacticiels déroutants, puisque Docker est évidemment au moment de ma rédaction à un aperçu des attentes exagérées , c'est:
docker save image_name > image_name.tar
cat image_name.tar | docker load
L'exportation et l'importation, comme proposé dans une autre réponse, n'exporte pas les ports et les variables, qui peuvent être nécessaires à l'exécution de votre conteneur. Et vous pourriez vous retrouver avec des trucs comme "Aucune commande spécifiée" etc ... Lorsque vous essayez de le charger sur une autre machine.
Ainsi, la différence entre enregistrer et exporter est que la commande save enregistre l'image entière avec l'historique et les métadonnées, tandis que la commande d'exportation exporte uniquement la structure des fichiers (sans historique ni métadonnées).
Inutile de dire que si vous avez déjà pris ces ports sur l'hyper-viseur docker que vous importez, par un autre conteneur docker, vous vous retrouverez en conflit et vous devrez reconfigurer les ports exposés.
la source
À partir de la documentation Docker:
la source
Utilisez ce script: https://github.com/ricardobranco777/docker-volumes.sh
Cela fait conserver les données en volumes.
Exemple d'utilisation:
la source
J'ai essayé de nombreuses solutions pour cela, et c'est celle qui a fonctionné pour moi:
1. valider / enregistrer le conteneur dans une nouvelle image:
# docker stop
# docker commit CONTAINER_NAME
# docker save --output IMAGE_NAME.tar IMAGE_NAME: TAG
ps: "Notre conteneur CONTAINER_NAME a un volume monté sur '/ var / home'" (vous devez inspecter votre conteneur pour spécifier son chemin de volume: # 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."
Maintenant, quand 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'.
Vous pouvez maintenant recréer le même ancien conteneur sur un nouvel hôte.
la source