Comment puis-je ajouter un volume à un conteneur Docker?
j'ai un conteneur Docker que j'ai créé simplement en installant Docker sur Ubuntu et en faisant:
sudo docker run -i -t ubuntu /bin/bash
j'ai immédiatement commencé à installer Java et d'autres outils, passer du temps avec elle et arrêté le conteneur par
exit
Ensuite, j'ai voulu ajouter un volume et se rendit compte que ce n'est pas aussi simple que je le pensais. Si j'utilise sudo docker -v /somedir run ...
alors je me retrouve avec un nouveau container, donc je dois installer Java et de faire ce que je l'ai déjà fait avant tout pour arriver à un récipient avec un volume monté.
toute la documentation sur le montage d'un dossier depuis l'hôte semble impliquer que le montage d'un volume est quelque chose qui peut être fait lors de la création d'un conteneur. Donc la seule option que je dois éviter de reconfigurer un nouveau conteneur à partir de Zéro est de transférer le conteneur existant dans un dépôt et de l'utiliser comme la base d'un nouveau tout en montant le volume.
Est-ce vraiment la seule façon d'ajouter un volume d'un conteneur existant?
4 réponses
vous pouvez engager votre conteneur existant (c'est-à-dire créer une nouvelle image à partir des changements de conteneur) et ensuite l'exécuter avec vos nouveaux supports.
exemple:
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5a8f89adeead ubuntu:14.04 "/bin/bash" About a minute ago Exited (0) About a minute ago agitated_newton
$ docker commit 5a8f89adeead newimagename
$ docker run -ti -v "$PWD/dir1":/dir1 -v "$PWD/dir2":/dir2 newimagename /bin/bash
si tout va bien, arrêtez votre vieux container, et utilisez ce nouveau.
c'est ça :)
nous n'avons aucun moyen d'ajouter du volume dans le conteneur courant, mais pour atteindre cet objectif vous pouvez utiliser les commandes suivantes:
copier des fichiers / dossiers entre un conteneur et le système de fichiers local: -
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
pour référence voir:
Jérôme Petazzoni a un billet de blog assez intéressant sur la façon de attacher un volume à un conteneur alors qu'il est en cours d'exécution . Ce n'est pas quelque chose qui est construit dans Docker hors de la boîte, mais possible d'accomplir.
comme il le souligne aussi
cela ne fonctionnera pas sur les systèmes de fichiers qui ne sont pas basés sur des périphériques de bloc.
cela ne fonctionnera que si / proc / mounts liste correctement le noeud de périphérique de bloc (qui, comme nous l'avons vu ci-dessus, n'est pas nécessairement vrai).
de plus, Je ne l'ai testé que sur mon environnement local; Je n'ai même pas essayé sur une instance de nuage ou quelque chose comme ça
YMMV
malheureusement, l'option de commutateur pour monter un volume ne se trouve que dans la commande run
.
docker run --help
-v, --volume list Bind mount a volume (default [])
il y a un moyen que vous puissiez contourner cela si vous n'avez pas à réinstaller les applications que vous avez déjà installées sur votre conteneur.
- exportez votre conteneur
docker container export -o ./myimage.docker mycontainer
- importer comme une image
docker import ./myimage.docker myimage
- puis
docker run -i -t -v /somedir --name mycontainer myimage /bin/bash