Montujesz wiele woluminów w kontenerze docker?

152

Wiem, że mogę zamontować katalog na moim hoście w moim kontenerze za pomocą czegoś takiego jak

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

Czy istnieje sposób na utworzenie więcej niż jednej pary host-kontener? np. lista oddzielona przecinkami czy przekazanie w tablicy?

Seldo
źródło
jak rozumiem obecny stan terminów w dokumentach, nie można zamontować woluminu (tytułu pytania), z pewnością można mieć wiele montowań
powiązań z

Odpowiedzi:

260

Przekaż wiele -vargumentów.

Na przykład:

docker -v /on/my/host/1:/on/the/container/1 \
       -v /on/my/host/2:/on/the/container/2 \
       ...
Charles Duffy
źródło
2
OK, więc robię to dokładnie w ten sam sposób, ale kiedy próbuję zadzwonić do drugiego, pojawia się komunikat, że nie znaleziono.
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 'To jest moje polecenie, próbuję skompilować plik mycode.c znajdujący się w pierwszym woluminie, ale nadaj temu samemu plikowi stdin z innego woluminu. Jak mam to zrobić?
momal
1
@YehCheez, sugerowałbym (zdecydowanie) otwarcie tego jako osobnego pytania i próbę zbudowania odtwarzacza. (Gdybyś mógł odtworzyć błąd za pomocą obrazu Dockera w rejestrze publicznym i utworzyć wszystkie lokalne zależności w skrypcie podanym w pytaniu, byłoby to idealne).
Charles Duffy
Czy zawsze potrzebuje ścieżek absolutnych?
xatzistnr
3
Cel zawsze musi być absolutny. Źródłem musi być ścieżka bezwzględna lub identyfikator nazwanego woluminu - zobacz docs.docker.com/engine/admin/volumes/volumes, aby uzyskać dokumenty dotyczące tego ostatniego.
Charles Duffy
19

Docker zaleca teraz migrację w kierunku używania --mount.

Wiele podłączeń woluminów jest również szczegółowo wyjaśnionych w aktualnej dokumentacji platformy Docker.

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

Oryginalna starsza odpowiedź powinna nadal działać; staram się tylko dopasować odpowiedź do aktualnie najbardziej znanej metody.

MadJangi
źródło
Warto dodać, że jedynym powodem, dla którego Docker zaleca migrację, jest to, że ich badania pokazują - montaż jest łatwiejszy w użyciu i ma więcej opcji. Używanie opcji -v lub --mount jest całkowicie w porządku, zależy to od osobistych preferencji i potrzeb.
KillerKode
18

Możesz użyć -vopcji wielokrotnie w docker runpoleceniu, aby zamontować wiele katalogów w kontenerze:

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
źródło
1
Czy to dodaje coś do poprzedniej odpowiedzi i daje ten sam efekt ?
Charles Duffy
6

Możesz mieć tylko do odczytu lub tylko do odczytu i zapisu na woluminie

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

docker -v /on/my/host/2:/on/the/container/2:rw \
senthil sivasamy
źródło
1
która jest opcją domyślną?
Hammad Dar
-9

Albo możesz to zrobić

docker run -v /var/volume1 -v /var/volume2 DATA busybox true
Joost van der Laan
źródło
4
Nie o to chodzi w PO. Tworzy to wolumin w kontenerze i nie wiąże go z hostem.
Ioannis
8
Masz rację, powinno być: docker run -v / var / volume1: / container / volume1 -v / var / volume2: / container / volume2 DATA busybox true
Joost van der Laan