Wie kann ich einen Ordner zwischen meinen Windows-Dateien und einem Docker-Container freigeben, indem Sie ein Volume mit dem einfachen --volume
-Befehl mit Docker Toolbox einhängen?
Ich verwende "Docker Quickstart Terminal" und wenn ich dies versuche:
winpty docker run -it --rm --volume /C/Users/myuser:/myuser ubuntu
Ich habe diesen Fehler:
Invalid value "C:\\Users\\myuser\\:\\myuser" for flag --volume: bad mount mode specified : \myuser
See 'docker run --help'.
Nach diesem habe ich es auch versucht
winpty docker run -it --rm --volume "//C/Users/myuser:/myuser" ubuntu
und bekam
Invalid value "\\\\C:\\Users\\myuser\\:\\myuser" for flag --volume: \myuser is not an absolute path
See 'docker run --help'.
Dies ist eigentlich eine Ausgabe des Projekts und es gibt zwei Problemumgehungen:
Datenvolumen erstellen:
docker create -v //c/Users/myuser:/myuser --name data hello-world
winpty docker run -it --rm --volumes-from data ubuntu
SSHing direkt im Docker-Host:
docker-machine ssh default
Und von da aus einen Klassiker:
docker run -it --rm --volume /c/Users/myuser:/myuser ubuntu
Dies ist eine Verbesserung der ausgewählten Antwort, da diese Antwort auf den Ordner c:\Users beschränkt ist. Wenn Sie ein Volume mit einem Verzeichnis außerhalb von c:\Users erstellen möchten, handelt es sich um eine Erweiterung.
In Windows 7 habe ich Docker-Toolbox verwendet. Es wurde Virtual Box verwendet.
Zum Beispiel habe ich in meinem Fall Folgendes hinzugefügt:
**Name**: c:\dev
**Path**: c/dev
Verwenden Sie diesen Befehl:
$ docker-machine restart
Gehen Sie folgendermaßen vor, um sich zu vergewissern, dass es funktioniert hat:
Verwenden Sie diesen Befehl:
$ docker-machine ssh
In meinem Fall verwende ich diesen Befehl
$ cd /c/dev
Sie werden so etwas sehen:
[email protected]:/c/dev$ ls -all
total 92
drwxrwxrwx 1 docker staff 4096 Feb 23 14:16 ./
drwxr-xr-x 4 root root 80 Feb 24 09:01 ../
drwxrwxrwx 1 docker staff 4096 Jan 16 09:28 my_folder/
In diesem Fall können Sie ein Volume für diesen Ordner erstellen.
Sie können diese Befehle verwenden:
docker create -v /c/dev/:/app/dev --name dev image
docker run -d -it --volumes-from dev image
oder
docker run -d -it -v /c/dev/:/app/dev image
Beide Befehle funktionieren für mich. Ich hoffe das wird nützlich sein.
Seit August 2016 verwendet Docker for Windows jetzt Hyper-V anstelle von Virtualbox. Ich denke, es ist ein bisschen anders. Geben Sie zuerst das Laufwerk in den Einstellungen frei, verwenden Sie dann das C:
-Laufwerksbuchstabenformat, verwenden Sie jedoch Schrägstriche. Zum Beispiel habe ich ein H:\t\REDIS
-Verzeichnis erstellt und konnte es mit folgendem Befehl auf /data
im Container einhängen:
docker run -it --rm -v h:/t/REDIS:/data redis sh
Das gleiche Format, Laufwerkbuchstabe und Doppelpunkt verwendet, dann Schrägstriche für den Pfadtrenner wurden sowohl vom Windows-Befehl Prompt als auch von git bash verwendet.
Ich fand diese Frage googeln, um eine Antwort zu finden, aber ich konnte nichts finden, das funktionierte. Die Dinge scheinen zu funktionieren, ohne dass Fehler ausgegeben werden, aber ich konnte die Daten auf dem Host nicht sehen (oder umgekehrt). Schließlich habe ich die Einstellungen genau durchgelesen und das Format ausprobiert:
Zuerst müssen Sie also das gesamte Laufwerk für die Docker-VM in Einstellungen freigeben. Ich denke, das gibt der Docker-Machine-VM, die in Hyper-V läuft, Zugriff auf dieses Laufwerk. Dann müssen Sie das dort gezeigte Format verwenden, das nur in diesem Bild zu existieren scheint und keine Dokumentation oder Fragen enthält, die ich im Web finden konnte:
docker run --rm -v c:/Users:/data Alpine ls /data
$ cd ~
Aus, um sicherzustellen, dass Sie sich im Windows-Benutzerverzeichnis befinden.$ docker run -it -v /$(pwd)/ubuntu:/windows ubuntu
Es wird funktionieren, wenn der Fehler auf Tippfehler zurückzuführen ist. Sie erhalten einen leeren Ordner mit dem Namen ubuntu
in Ihrem Benutzerverzeichnis. Sie sehen diesen Ordner mit dem Namen windows
in Ihrem Ubuntu-Container.
Für Benutzer, die Virtual Box verwenden, die Befehlszeile bevorzugen
1) Stellen Sie sicher, dass die Docker-Maschine nicht läuft
Docker-Schnellstart-Terminal:
docker-machine stop
2) Erstellen der freigegebenen Windows <-> Docker-Maschine
Windows-Eingabeaufforderung:
(Ändern Sie das Folgende entsprechend Ihrem Szenario. Ich füttere meinen Apache-httpd-Container aus einem über Dropbox synchronisierten Verzeichnis.)
set VBOX=D:\Program Files\Oracle\VirtualBox\VBoxManage.exe
set VM_NAME=default
set NAME=c/htdocs
set HOSTPATH=%DROPBOX%\htdocs
"%VBOX%" sharedfolder add "%VM_NAME%" --name "%NAME%" --hostpath "%HOSTPATH%" --automount
3) Starten Sie die Docker-Maschine und mounten Sie das Volume in einem neuen Container.
Docker-Schnellstart-Terminal:
(Wieder starte ich einen Apache-HTTPd-Container, daher wird dieser Port angezeigt.)
docker-machine start
docker run -d --name my-Apache-container-0 -p 80:80 -v /c/htdocs:/usr/local/Apache2/htdocs my-Apache-image:1.0
Wenn Sie nach einer Lösung suchen, mit der alle Windows-Probleme behoben werden können und unter Windows auf dieselbe Weise wie unter Linux funktionieren, dann lesen Sie unten. Ich habe das getestet und es funktioniert in allen Fällen. Ich zeige auch, wie ich es bekomme (Schritte und Denkprozess). Ich habe hier auch einen Artikel über die Verwendung von Docker und den Umgang mit Docker-Problemen geschrieben.
freigabeordner VirtualBox-Toolbox und Windows 7 und Nodejs-Image-Container
using ... Docker Quickstart Terminal [QST] Windows Explorer [WE]
lasst uns beginnen...
[QST] Öffnen Sie das Docker Quickstart Terminal
[QST] stoppt die virtuelle Maschine
$ docker-machine stop
[WE] einen Windows Explorer öffnen
[WE] gehen Sie in das Installationsverzeichnis von virtualBox
[WE] eine cmd öffnen und ausführen ...
C:\Programme\Oracle\VirtualBox> Gemeinsamer Ordner von VBoxManage füge "default" --name "/ D/SVN_FOLDERS/X2R2_WP6/nodejs" --hostpath "\?\D:\SVN_FOLDERS\X2R2_WP6\nodejs" hinzu. Automount
Überprüfen Sie in der virtuellen Oracle-Maschine, ob der neue freigegebene Ordner angezeigt wurde
[QST] Start der virtuellen Maschine
$ docker-machine start
docker stop nodejs
docker rm nodejs
andock-Run -d -it -rm -name nodejs -v/d/SVN_FOLDERS/X2R2_WP6/nodejs:/usr/src/app -w/usr/src/app node2
docker exec -i -t nodejs/bin/bash
Unter Windows 7 funktionierte es einfach, doppelt führende Schrägstriche zu verwenden:
docker run --rm -v //c/Users:/data Alpine ls /data/
Genommen von hier: https://github.com/moby/moby/issues/12590
Ich habe es gelöst!
Fügen Sie ein Volume hinzu:
docker-Run -d -v mein-named-Volume: C:\MyNamedVolume Testbild: Späteste
Mounten Sie ein Host-Verzeichnis:
docker-Run -d -v C:\Temp\123: C:\My\Shared\Dir Testbild: Späteste