Mehrere Volumes auf einem Docker-Container bereitstellen?

151

Ich weiß, dass ich mit so etwas ein Verzeichnis in meinem Host auf meinem Container bereitstellen kann

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

Gibt es eine Möglichkeit, mehr als ein Host-Container-Paar zu erstellen? zB eine durch Kommas getrennte Liste oder ein Array übergeben?

Seldo
quelle
Soweit ich den aktuellen Stand der Dokumentbegriffe verstehe, können Sie kein Volume (Titel der Frage) bereitstellen. Sie können sicherlich viele Bindungs-Mounts für Host-Ordner haben (das wird in der Fragestellung verlangt)
Alexei Martianov

Antworten:

259

Übergeben Sie mehrere -vArgumente.

Zum Beispiel:

docker -v /on/my/host/1:/on/the/container/1 \
       -v /on/my/host/2:/on/the/container/2 \
       ...
Charles Duffy
quelle
2
Okay, ich mache das genauso, aber wenn ich versuche, den zweiten anzurufen, heißt es, dass er nicht gefunden wird.
Mutter
Docker-Lauf -v / home / usr / Arbeitsbereich / proj / WebContent / Datei / Benutzername: / mycode -v / home / usr / Arbeitsbereich / proj / WebContent / Datei: / tst gcc: 4.9 sh -c 'cd mycode; gcc -o myapp ./mycode.c; cd tst; ./myapp <./test.txt 'Dies ist mein Befehl. Ich versuche, die mycode.c zu kompilieren, die sich im ersten Volume befindet, aber geben Sie derselben Datei einen Standard von einem anderen Volume. Wie mache ich es?
Mutter
1
@YehCheez, ich würde (dringend) empfehlen, dies als separate Frage zu öffnen und zu versuchen, einen Reproduzent zu bauen. (Wenn Sie den Fehler mit einem Docker-Image in der öffentlichen Registrierung wiederholen und alle lokalen Abhängigkeiten in dem in der Frage angegebenen Skript erstellen könnten, wäre dies ideal.)
Charles Duffy
Braucht es immer absolute Pfade?
Xatzistnr
3
Das Ziel muss immer absolut sein. Die Quelle muss entweder ein absoluter Pfad oder die Kennung für ein benanntes Volume sein - siehe docs.docker.com/engine/admin/volumes/volumes für Dokumente zu letzterem.
Charles Duffy
19

Docker empfiehlt jetzt die Migration in Richtung Verwendung --mount.

In der aktuellen Docker-Dokumentation werden auch mehrere Volume-Mounts ausführlich erläutert.

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

Die ursprüngliche ältere Antwort sollte immer noch funktionieren. Ich versuche nur, die Antwort auf die derzeit bekannteste Methode auszurichten.

MadJangi
quelle
Es lohnt sich, den einzigen Grund hinzuzufügen, warum Docker die Migration empfiehlt, weil die Forschung zeigt, dass Mount einfacher zu verwenden ist und mehr Optionen bietet. Die Verwendung von -v oder --mount ist vollkommen in Ordnung. Dies hängt von Ihren persönlichen Vorlieben und Bedürfnissen ab.
KillerKode
18

Sie können die -vOption mehrmals im docker runBefehl verwenden, um mehrere Verzeichnisse im Container bereitzustellen:

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
quelle
1
Fügt dies der vorhergehenden Antwort etwas hinzu, um den gleichen Effekt zu erzielen ?
Charles Duffy
6

Sie können Nur Lesen oder Nur Lesen und Schreiben auf dem Volume haben

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

docker -v /on/my/host/2:/on/the/container/2:rw \
senthil sivasamy
quelle
1
Welches ist die Standardoption?
Hammad Dar
-9

Oder du kannst es tun

docker run -v /var/volume1 -v /var/volume2 DATA busybox true
Joost van der Laan
quelle
4
Dies ist nicht das, wonach das OP strebt. Dadurch wird ein Volume im Container erstellt und nicht an den Host gebunden.
Ioannis
8
Sie haben Recht, sollte sein: Docker run -v / var / volume1: / container / volume1 -v / var / volume2: / container / volume2 DATA Busybox true
Joost van der Laan