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?


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 \
       ...

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.


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


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 \

1
Welches ist die Standardoption?
Hammad Dar

-9

Oder du kannst es tun

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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.