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?

135
demandé sur Peter Mortensen 2015-02-03 18:08:17

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 :)

192
répondu Leonardo Cuquejo 2018-02-03 20:45:12

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:

https://docs.docker.com/engine/reference/commandline/cp /

28
répondu user128364 2017-03-02 12:40:33

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

7
répondu R0MANARMY 2016-11-29 20:05:07

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.

  1. exportez votre conteneur docker container export -o ./myimage.docker mycontainer
  2. importer comme une image docker import ./myimage.docker myimage
  3. puis docker run -i -t -v /somedir --name mycontainer myimage /bin/bash
5
répondu Adel Helal 2017-02-25 04:54:04