7 Stimmen

Volume an Docker-Image unter OSX einbinden

Auf einem Mac, wie mounten Sie ein Volume auf einen Docker-Container?

Auf meinem Linux-Rechner ist das einfach. Alles was ich tun muss, ist etwas wie -v /src/webapp:/opt/webapp beim Ausführen des Containers. Aber auf dem Mac ist es anders, da ich boot2docker ausführen muss, um eine VM in VirtualBox auszuführen. Ich habe versucht zu führen

boot2docker init
boot2docker up
boot2docker ssh # um herumzustöbern
boot2docker stop
VBoxManage sharedfolder add "boot2docker-vm" --name "Users" --hostpath /Users
boot2docker up
boot2docker ssh "sudo modprobe vboxsf"

aber ich bekomme

modprobe: Modul vboxsf nicht in modules.dep gefunden

Wenn ich das ignoriere und trotzdem versuche, auf der VM zu mounten wie folgt

boot2docker ssh "sudo mkdir /test && sudo mount -t vboxsf Users /test"

bekomme ich

mount: Einhängen von Users auf /test fehlgeschlagen: Kein solches Gerät

Ich habe das Gefühl, dass ich etwas extrem simples vermisse, aber ich kann es nicht ganz herausfinden. Jede Hilfe wäre sehr geschätzt.

6voto

geowa4 Punkte 38662

Ok, nachdem ich durch einen GitHub PR gegraben habe, konnte ich einen Weg finden, dies zu tun. Für zukünftige Leser da draußen sollte dieser Prozess in einem bevorstehenden Release von boot2docker behoben sein.

# annehmen, dass boot2docker und VirtualBox installiert sind
wget http://static.dockerfiles.io/boot2docker-v1.2.0-virtualbox-guest-additions-v4.3.14.iso
mv boot2docker-v1.2.0-virtualbox-guest-additions-v4.3.14.iso ~/.boot2docker/boot2docker.iso
# löschen Sie Ihre alte boot2docker-vm, wenn sie existiert (boot2docker down && boot2docker destroy)
boot2docker init
boot2docker up
# setzen Sie DOCKER_HOST wie angegeben
boot2docker stop
VBoxManage sharedfolder add boot2docker-vm --name /Users --hostpath /Users
boot2docker up
# wenn Sie jetzt in die VM ssh'en, werden Sie feststellen, dass /Users vorhanden ist, aber leer; Ich weiß/nicht warum das so ist.
boot2docker ssh "sudo mount -t vboxsf -o uid=1000,gid=50 /Users /Users"
# erledigt

Dies hat für mich funktioniert, also hoffe ich, dass es auch für andere funktioniert. In naher Zukunft erwarte ich, dass dieses Problem von boot2docker gelöst wird, insbesondere da der PR, aus dem ich diese Befehle erhalten habe, zusammengeführt wurde.

BEARBEITEN: boot2docker 1.3.0 unterstützt dies ohne weitere Änderungen. Nach dem Update habe ich diese Befehle ausgeführt:

boot2docker destroy  # von vorne beginnen
boot2docker download # das aktualisierte ISO herunterladen
boot2docker init
boot2docker up
# erledigt

3voto

Eli Punkte 33997

Für Leute, die dies in der Zukunft finden und etwas anderes als /Users mounten möchten, gibt es ein Skript, das jemand als Gist auf github erstellt hat und den gesamten Prozess für Sie durchführt. Einfach dieses verwenden. Es hat mir viel Kopfschmerzen erspart, weil ich nicht ständig mit Virtualbox herumspielen musste. Dies ist getestet ab Docker 1.3.0 auf meinem Mac mit Yosemite.

ÄNDERUNG:

Da die docker-machine CLI zugunsten von docker-machine veraltet ist, hier ist, wie Sie es mit docker-machine machen können:

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

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

Jetzt den Ordner für VirtualBox freigeben:

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

Schließlich ssh erneut in die docker-machine und mounten Sie den Ordner, den wir gerade freigegeben haben:

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 noch nicht vergeben sind.

Dies ist getestet ab docker-machine 0.4.1 und docker 1.8.3 auf OS X El Capitan.

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