¿Montaje de múltiples volúmenes en un contenedor acoplable?

153

Sé que puedo montar un directorio en mi host en mi contenedor usando algo como

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

¿Hay alguna manera de crear más de un par host-contenedor? por ejemplo, una lista separada por comas, o pasar en una matriz?

Seldo
fuente
Como entiendo los términos del estado actual de los documentos, no puede montar un volumen (título de la pregunta), ciertamente puede tener muchos montajes de enlace para alojar carpetas (eso es lo que se solicita en el cuerpo de la pregunta)
Alexei Martianov

Respuestas:

260

Pase múltiples -vargumentos.

Por ejemplo:

docker -v /on/my/host/1:/on/the/container/1 \
       -v /on/my/host/2:/on/the/container/2 \
       ...
Charles Duffy
fuente
2
De acuerdo, entonces estoy haciendo esto exactamente de la misma manera, pero cuando trato de llamar al segundo dice que no se encuentra.
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 'Este es mi comando, estoy tratando de compilar el mycode.c que está en el primer volumen, pero le doy al mismo archivo un stdin de un volumen diferente. ¿Cómo lo hago?
Momal
1
@YehCheez, sugeriría (fuertemente) abrir esto como una pregunta separada e intentar construir un reproductor. (Si pudiera reprobar el error con una imagen de Docker en el registro público y crear todas las dependencias locales en el script que figura en la pregunta, sería ideal).
Charles Duffy
¿Siempre necesita caminos absolutos?
xatzistnr
3
El destino siempre debe ser absoluto. La fuente debe ser una ruta absoluta o el identificador de un volumen con nombre; consulte docs.docker.com/engine/admin/volumes/volumes para obtener documentos sobre este último.
Charles Duffy
19

Docker ahora recomienda migrar hacia el uso --mount.

Múltiples montajes de volumen también se explican en detalle en la documentación actual 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 respuesta original anterior aún debería funcionar; solo trato de mantener la respuesta alineada con el método más conocido actual.

MadJangi
fuente
Vale la pena agregar que la única razón por la que Docker recomienda migrar es porque su investigación muestra que: el montaje es más fácil de usar y tiene más opciones. El uso de -v o --mount está perfectamente bien, esto depende de sus preferencias y necesidades personales.
KillerKode
18

Puede usar la -vopción varias veces al docker runcomando para montar múltiples directorios en el contenedor:

docker run -t -i \
  -v '/on/my/host/test1:/on/the/container/test1' \
  -v '/on/my/host/test2:/on/the/container/test2' \
  ubuntu /bin/bash
Gaurav Sehgal
fuente
1
¿Esto agrega algo a la respuesta anterior con el mismo efecto ?
Charles Duffy
6

Puede tener solo lectura o leer y escribir solo en el volumen

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

docker -v /on/my/host/2:/on/the/container/2:rw \
senthil sivasamy
fuente
1
¿Cuál es la opción predeterminada?
Hammad Dar
-9

O puedes hacer

docker run -v /var/volume1 -v /var/volume2 DATA busybox true
Joost van der Laan
fuente
44
Esto no es lo que busca el OP. Esto crea un volumen dentro del contenedor y no lo vincula al host.
Ioannis
8
Tiene razón, debería ser: docker run -v / var / volume1: / container / volume1 -v / var / volume2: / container / volume2 DATA busybox true
Joost van der Laan