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)?

34voto

user3680997 Punkte 382

Ist es möglich, Docker auf OS X über boot2docker oder etwas ähnliches zu verwenden.

Ich habe die gleiche Erfahrung gemacht - der Befehl ist korrekt, aber trotzdem wird nichts Sinnvolles im Container eingebunden.

Wie sich herausstellt, ist dies bereits in der Docker-Dokumentation erklärt. Wenn Sie docker run -v /var/logs/on/host:/var/logs/in/container ... eingeben, wird /var/logs/on/host tatsächlich von der boot2docker VM-Image gemappt, nicht von Ihrem Mac.

Sie müssen den freigegebenen Ordner durch Ihre VM auf Ihren tatsächlichen Host (den Mac in meinem Fall) leiten.

30voto

Sven Punkte 818

Ich experimentiere nur damit, meine SailsJS-App in einem Docker-Container auszuführen, um meine physische Maschine sauber zu halten.

Ich benutze folgenden Befehl, um meine SailsJS/NodeJS-Anwendung unter /app zu mounten:

cd mein\_quellcode\_ordner
docker run -it -p 1337:1337 -v $(pwd):/app mein\_docker/bild\_mit\_nodejs\_etc

28voto

Eli Punkte 33997

[UPDATE] Ab ~Juni 2017 übernimmt Docker für Mac alle lästigen Teile, bei denen Sie sich mit VirtualBox herumärgern müssen. Es ermöglicht Ihnen, im Grunde genommen alles auf Ihrem lokalen Host unter Verwendung des Präfixes /private zu mappen. Weitere Informationen finden Sie hier. [/UPDATE]

Alle aktuellen Antworten handeln von Boot2docker. Da dies jetzt zugunsten von docker-machine veraltet ist, funktioniert dies für docker-machine:

Zuerst ssh in die docker-machine-vm und erstellen Sie den Ordner, den wir mappen werden:

docker-machine ssh $MACHINE_NAME "sudo mkdir -p \"$VOL_DIR\""

Teilen Sie jetzt den Ordner mit VirtualBox:

WORKDIR=$(basename "$VOL_DIR")
vboxmanage sharedfolder add "$MACHINE_NAME" --name "$WORKDIR" --hostpath "$VOL_DIR" --transient

Zum Schluss ssh in die docker-machine erneut und mounten Sie den gerade freigegebenen Ordner:

docker-machine ssh $MACHINE_NAME "sudo mount -t vboxsf -o uid=\"$U\",gid=\"$G\" \"$WORKDIR\" \"$VOL_DIR\""

Hinweis: Für UID und GID können Sie im Grunde genommen beliebige Ganzzahlen verwenden, solange sie nicht bereits vergeben sind.

Dies wurde getestet mit docker-machine 0.4.1 und docker 1.8.3 auf OS X El Capitan.

27voto

Bayu Dwiyan Satria Punkte 1016

Mit Befehlszeile :

docker run -it --name  -p : -v : -d :

Mit docker-compose.yaml :

version: '2'
  services:
    cms:
       image: :
       ports:
       - :
       volumes:
       - :

Annehmen :

  • IMAGE: k3_s3
  • TAG: latest
  • LOCAL_PORT: 8080
  • CONTAINER_PORT: 8080
  • LOCAL_PATH: /volume-to-mount
  • CONTAINER_PATH: /mnt

Beispiele :

  1. Erstelle zuerst /volume-to-mount. (Überspringen, wenn existiert)

    $ mkdir -p /volume-to-mount

  2. docker-compose -f docker-compose.yaml up -d

    version: '2' services: cms: image: ghost-cms:latest ports:

    • 8080:8080 volumes:
    • /volume-to-mount:/mnt
  3. Überprüfe deinen Container :

    docker exec -it CONTAINER_ID ls -la /mnt

25voto

Ali Punkte 368
docker run -v /host/directory:/container/directory -t IMAGE-NAME /bin/bash

docker run -v /root/shareData:/home/shareData -t kylemanna/openvpn /bin/bash

In meinem System habe ich die Antwort von nhjk korrigiert, es funktioniert einwandfrei, wenn Sie das -t Flag hinzufügen.

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