906 Stimmen

Wie man ein Host-Verzeichnis in einem Docker-Container einbindet

Ich versuche, ein Host-Verzeichnis in einen Docker-Container zu mounten, damit alle Updates auf dem Host in den Docker-Containern reflektiert werden.

Wo mache ich einen Fehler. Hier ist, was ich gemacht habe:

kishore$ cat Dockerfile

FROM ubuntu:trusty
RUN apt-get update
RUN apt-get -y install git curl vim
CMD ["/bin/bash"]
WORKDIR /test_container
VOLUME ["/test_container"]

kishore$ tree
.
 Dockerfile
 main_folder
     tfile1.txt
     tfile2.txt
     tfile3.txt
     tfile4.txt

kishore$ docker build --tag=k3_s3:latest .

Uploading context 7.168 kB
Uploading context
Step 0 : FROM ubuntu:trusty
 ---> 99ec81b80c55
Step 1 : RUN apt-get update
 ---> Using cache
 ---> 1c7282005040
Step 2 : RUN apt-get -y install git curl vim
 ---> Using cache
 ---> aed48634e300
Step 3 : CMD ["/bin/bash"]
 ---> Running in d081b576878d
 ---> 65db8df48595
Step 4 : WORKDIR /test_container
 ---> Running in 5b8d2ccd719d
 ---> 250369b30e1f
Step 5 : VOLUME ["/test_container"]
 ---> Running in 72ca332d9809
 ---> 163deb2b1bc5
Successfully built 163deb2b1bc5
Removing intermediate container b8bfcb071441
Removing intermediate container d081b576878d
Removing intermediate container 5b8d2ccd719d
Removing intermediate container 72ca332d9809

kishore$ docker run -i -t k3_s3:latest /bin/bash

root@0f17e2313a46:/test_container# ls -al
total 8
drwx------  2 root root 4096 Apr 29 05:15 .
drwxr-xr-x 66 root root 4096 Apr 29 05:15 ..

kishore$ docker -v
Docker version 0.9.1, build 867b2a9
  • Ich weiß nicht, wie man die boot2docker-Version überprüft

Fragen, Probleme:

  1. Wie muss ich das main_folder mit dem im Docker-Container vorhandenen test_container-Ordner verknüpfen?
  2. Ich möchte das automatisieren. Wie kann ich das machen, ohne wirklich den run -d -v-Befehl zu verwenden?
  3. Was passiert, wenn boot2docker abstürzt? Wo sind die Docker-Dateien gespeichert (abgesehen vom Dockerfile)?

22voto

bormat Punkte 1191

Auf Mac OS, um einen Ordner /Benutzer//projekte/ auf Ihrem Mac am Root Ihres Containers zu mounten:

docker run -it -v /Benutzer//projekte/:/projekte bash

ls /projekte

17voto

Duke79 Punkte 805

Wenn der Host Windows 10 ist, verwenden Sie anstelle des Schrägstrichs einen umgekehrten Schrägstrich -

docker run -it -p 12001:80 -v c:\Users\C\Desktop\dockerStorage:/root/sketches

Stellen Sie sicher, dass das Laufwerk des Hosts freigegeben ist (in diesem Fall C). In meinem Fall wurde ich nach der Ausführung des obigen Befehls um Freigabeberechtigungen gebeten.

15voto

K F Punkte 1248

Für Windows 10-Benutzer ist es wichtig, den Mount-Punkt innerhalb des C:/Benutzer/-Verzeichnisses zu haben. Ich habe stundenlang versucht, das zum Laufen zu bringen. Dieser Beitrag hat geholfen, aber es war nicht offensichtlich, da die Lösung für Windows 10 ein Kommentar zu einer akzeptierten Antwort ist. So habe ich es gemacht:

docker run -it -p 12001:80 -v //c/Users/C/Desktop/dockerStorage:/root/sketches \
 /bin/bash

Dann können Sie es testen, indem Sie echo TEST > hostTest.txt innerhalb Ihres Images ausführen. Sie sollten diese neue Datei im lokalen Host-Ordner unter C:/Benutzer/C/Desktop/dockerStorage/ sehen können.

13voto

rainabba Punkte 3396

Ab Docker 18-CE können Sie docker run -v /src/path:/container/path verwenden, um eine 2-Wege-Bindung eines Host-Ordners durchzuführen.

Es gibt jedoch einen großen Haken, wenn Sie mit Windows 10/WSL arbeiten und Docker-CE für Windows als Ihren Host haben und dann docker-ce-Client-Tools in WSL. WSL kennt das gesamte / Dateisystem, während Ihr Windows-Host nur Ihre Laufwerke kennt. Innerhalb von WSL können Sie /mnt/c/projectpath verwenden, aber wenn Sie docker run -v ${PWD}:/projectpath ausführen, werden Sie feststellen, dass /projectpath/ auf dem Host leer ist, weil auf dem Host /mnt nichts bedeutet.

Wenn Sie jedoch von /c/projectpath aus arbeiten und DANN docker run -v ${PWD}:/projectpath ausführen, werden Sie feststellen, dass im Container /projectpath in Echtzeit /c/projectpath widerspiegelt. Es gibt keine Fehler oder andere Möglichkeiten, dieses Problem zu erkennen, außer leere Mounts in Ihrem Gast zu sehen.

Sie müssen auch sicherstellen, dass Sie das Laufwerk in den Einstellungen von Docker für Windows "freigeben".

11voto

NikitQa Punkte 123

Ich hatte das gleiche Problem. Meine Befehlszeile sah so aus:

docker run --rm -i --name $NAME -v `pwd`:/sources:z $NAME

Das Problem lag bei 'pwd'. Also habe ich das zu $(pwd) geändert:

docker run --rm -i --name $NAME -v $(pwd):/sources:z $NAME

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X