3 votes

Comment créer une image à partir d'un contenant docker qui inclut des données de volume ?

Considérons un Dockerfile qui déclare deux volumes

FROM someimage
# ...
VOLUME ["/foo", "/bar"]

et un conteneur démarré à partir de cette image, qui fait un bind mount pour l'un de ces volumes :

docker run --name mycontainer -d -v /some/path:/foo myimage

Si je créais une nouvelle image à partir de ce conteneur en utilisant

docker commit mycontainer myexportedimage

les deux voies, /foo y /bar seront exclus de l'image exportée.

Comment créer une image exécutable (c'est-à-dire conservant les méta-données du Dockerfile) à partir de mycontainer qui inclut les données des deux chemins, /foo (à lier) et /bar (volume tel que déclaré par Dockerfile), donc si j'exportais l'image vers un autre hôte Docker, toutes les données seraient présentes ?

1voto

Disclaimer : la réponse est incomplète car vous ne serez pas en mesure de gérer cela à partir d'un Dockerfile comme demandé et le point est pris que "nous ne devrions pas être dans cette situation et nous ne devrions pas essayer de résoudre ce problème de cette manière".

Je sais que c'est une vieille question mais j'ai rencontré la même situation et voici ce que j'ai fait.

Vous pouvez créer une image avec le contenu de vos volumes en utilisant docker cp pour importer le contenu de votre volume localement dans le conteneur (copiez-le simplement ailleurs dans votre conteneur en cours d'exécution et soyez conscient que cela duplique les données, surveillez donc l'utilisation de votre système de fichiers). Ou bien exec et utiliser cp pour copier les données de votre volume monté ailleurs (c'est-à-dire dans une tmp ).

Ensuite, vous pouvez docker commit ce conteneur pour le transformer en image. Exécutez un nouveau conteneur à partir de cette nouvelle image sans utiliser les volumes docker et replacez les fichiers copiés là où ils devraient être si les volumes étaient montés.

Maintenant, utilisez docker commit à nouveau pour obtenir une image réutilisable à partir du conteneur où vous avez copié le contenu de vos volumes.

Vous pouvez maintenant étiqueter et/ou pousser cette image vers un registre ou une docker save dans une archive et l'utiliser là où vous en avez besoin.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X