Comment déplacer des conteneurs de docker entre différents hôtes

Je n’arrive pas à trouver un moyen de déplacer les conteneurs exécutant Docker d’un hôte à un autre.

Y a-t-il un moyen de repousser mes conteneurs 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. Certaines données résident donc dans des conteneurs que je souhaite conserver avant de modifier la configuration.

Toute aide est appréciée.

Vous ne pouvez pas déplacer un conteneur d’ancrage en cours d’exécution d’un hôte à un autre.

Vous pouvez valider les modifications apscopes dans votre conteneur à une image avec docker commit , déplacer l’image sur un nouvel hôte, puis démarrer un nouveau conteneur avec l’ docker run . Cela préservera toutes les données créées par votre application dans le conteneur.

alternativement, si vous ne souhaitez pas pousser dans un référentiel:

1) Exporter le conteneur dans une archive

  docker export  > /home/export.tar 

2) Déplacez votre tarball sur une nouvelle machine

3) L’importer

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

De la documentation Docker:

docker export pas le contenu des volumes associés au conteneur. Si un volume est monté sur un répertoire existant dans le conteneur, docker export exportera le contenu du répertoire sousjacent , pas le contenu du volume. Reportez-vous à la section Sauvegarde, restauration ou migration de volumes de données dans le guide de l’utilisateur pour obtenir des exemples sur l’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/

Ce qui a finalement fonctionné pour moi, après de nombreux manuels confus et des didacticiels déroutants, puisque Docker est évidemment au moment où j’écris des attentes exagérées , est:

  1. Enregistrez l’image du docker dans l’archive:
    docker save image_name > image_name.tar
  2. copier sur une autre machine
  3. sur cette autre machine, exécutez docker load de la manière suivante:
    cat image_name.tar | docker load

L’exportation et l’importation, telles que proposées dans une autre réponse, n’exportent pas les ports et les variables 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.

Ainsi, la différence entre enregistrer et exporter est que cette commande enregistre toute l’image 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).