Montage de plusieurs volumes sur un conteneur Docker?


153

Je sais que je peux monter un répertoire dans mon hôte sur mon conteneur en utilisant quelque chose comme

docker run -t -i -v '/on/my/host:/on/the/container' ubuntu /bin/bash

Existe-t-il un moyen de créer plus d'une paire hôte-conteneur? par exemple une liste séparée par des virgules, ou passer dans un tableau?


si je comprends bien l'état actuel des termes de la documentation, vous ne pouvez pas monter un volume (titre de la question), vous pouvez certainement avoir de nombreux montages de liaison vers des dossiers hôtes (c'est ce qui est demandé dans le corps de la question)
Alexei Martianov

Réponses:


260

Passez plusieurs -varguments.

Par exemple:

docker -v /on/my/host/1:/on/the/container/1 \
       -v /on/my/host/2:/on/the/container/2 \
       ...

2
Ok, donc je fais exactement ça de la même manière, mais quand j'essaie d'appeler le second, il dit qu'il n'est pas trouvé.
momal

docker run -v / home / usr / workspace / proj / WebContent / file / username: / mycode -v / home / usr / workspace / proj / WebContent / file: / tst gcc: 4.9 sh -c 'cd mycode; gcc -o myapp ./mycode.c; cd tst; ./myapp <./test.txt 'Ceci est ma commande, j'essaye de compiler le mycode.c qui se trouve dans le premier volume, mais donnez à ce même fichier un stdin d'un volume différent. Comment fait-on ça?
momal

1
@YehCheez, je suggère (fortement) d'ouvrir ceci comme une question séparée et d'essayer de construire un reproducteur. (Si vous pouviez reproduire le bogue avec une image Docker dans le registre public, et créer toutes les dépendances locales dans le script donné dans la question, ce serait idéal).
Charles Duffy

A-t-il toujours besoin de chemins absolus?
xatzistnr

3
La destination doit toujours être absolue. La source doit être soit un chemin absolu, soit l'identifiant d'un volume nommé - voir docs.docker.com/engine/admin/volumes/volumes pour la documentation sur ce dernier.
Charles Duffy

19

Docker recommande maintenant de migrer vers l'utilisation --mount.

Les montages de volumes multiples sont également expliqués en détail dans la documentation actuelle de Docker.

De: https://docs.docker.com/storage/bind-mounts/

$ docker run -d \
  -it \
  --name devtest \
  --mount type=bind,source="$(pwd)"/target,target=/app \
  --mount type=bind,source="$(pwd)"/target,target=/app2,readonly,bind-propagation=rslave \
  nginx:latest

La réponse originale plus ancienne devrait toujours fonctionner; essayez simplement de garder la réponse alignée sur la méthode la plus connue actuellement.


Cela vaut la peine d'ajouter la seule raison pour laquelle Docker recommande de migrer est parce que leurs recherches montrent que --mount est plus facile à utiliser et qu'il a plus d'options. L'utilisation de -v ou --mount est parfaitement bien, cela dépend de vos préférences et besoins personnels.
KillerKode


6

Vous pouvez avoir lecture seule ou lecture et écriture uniquement sur le volume

docker -v /on/my/host/1:/on/the/container/1:ro \

docker -v /on/my/host/2:/on/the/container/2:rw \

1
quelle est l'option par défaut?
Hammad Dar

-9

Ou tu peux faire

docker run -v /var/volume1 -v /var/volume2 DATA busybox true

4
Ce n'est pas ce que veut l'OP. Cela crée un volume dans le conteneur et ne le lie pas à l'hôte.
Ioannis

8
Vous avez raison, devrait être: docker run -v / var / volume1: / container / volume1 -v / var / volume2: / container / volume2 DATA busybox true
Joost van der Laan
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.