web-dev-qa-db-de.com

Wie verwende ich die Option --volume mit der Docker Toolbox unter Windows?

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'.
32
Anthony O.

Dies ist eigentlich eine Ausgabe des Projekts und es gibt zwei Problemumgehungen:

  1. Datenvolumen erstellen:

    docker create -v //c/Users/myuser:/myuser --name data hello-world
    winpty docker run -it --rm --volumes-from data ubuntu
    
  2. 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
    
26
Anthony O.

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. 

  1. Virtuelle Box öffnen
  2. Wählen Sie die Maschine aus (in meinem Fall Standard). 
  3. Klicken Sie mit der rechten Maustaste und wählen Sie die Option Einstellungen
  4. Gehen Sie zu Freigegebene Ordner
  5. Fügen Sie einen neuen Maschinenordner hinzu. 

Zum Beispiel habe ich in meinem Fall Folgendes hinzugefügt:

**Name**: c:\dev
**Path**: c/dev
  1. Klicken und schließen
  2. Öffnen Sie "Docker Quickstart Terminal" und starten Sie die Docker-Maschine neu. 

Verwenden Sie diesen Befehl:

$ docker-machine restart

Gehen Sie folgendermaßen vor, um sich zu vergewissern, dass es funktioniert hat:

  1. SSH an die Docker-Maschine.

Verwenden Sie diesen Befehl:

$ docker-machine ssh
  1. Gehen Sie zu dem Ordner, den Sie freigegeben/gemountet haben. 

In meinem Fall verwende ich diesen Befehl

$ cd /c/dev
  1. Überprüfen Sie den Benutzer des Ordners. Sie können "ls -all" verwenden und überprüfen, ob der Besitzer "Docker" ist.

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.

42
jmgoyesc

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:

 enter image description here

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
6
Jason Goemaat

Versuche dies:

  1. Öffnen Sie Docker Quickstart Terminal. Wenn es bereits geöffnet ist, führen Sie $ cd ~ Aus, um sicherzustellen, dass Sie sich im Windows-Benutzerverzeichnis befinden.
  2. $ 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.

4
Thoran

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
3

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.

Lösung 1: Verwenden Sie VirtualBox (wenn Sie denken, dass dies keine gute Idee ist, siehe Lösung 2 unten).

  • Öffnen Sie VirtualBox (Sie haben es bereits zusammen mit den Docker-Tools installiert)
  • Virtuelle Maschine erstellen 
  • (Dies ist optional, Sie können es überspringen und Ports von der VM weiterleiten.) Erstellen Sie eine zweite Ethernet-Karte - überbrückt. Auf diese Weise erhält sie eine IP-Adresse von Ihrem Netzwerk (IP-Adresse wie eine Docker-Maschine).
  • Installieren Sie Ubuntu LTS, das älter als 1 Jahr ist
  • Docker installieren 
  • Fügen Sie der virtuellen Maschine gemeinsam genutzte Verzeichnisse hinzu und stellen Sie Ihre Projektverzeichnisse automatisch ein (auf diese Weise haben Sie Zugriff auf das Projektverzeichnis von Ubuntu). Sie können jedoch weiterhin unter Windows arbeiten
  • Erledigt

Bonus:

  • Alles funktioniert genauso wie unter Linux
  • Halten Sie die angedockte Umgebung an, wann immer Sie möchten

Lösung 2: Verwenden Sie VirtualBox (dies ist der Lösung 1 sehr ähnlich, zeigt jedoch auch den Denkprozess, der bei der Lösung ähnlicher Probleme nützlich sein kann.)

  • Lesen Sie, dass jemand die Ordner nach/C/Users/Public verschoben hat und das funktioniert https://forums.docker.com/t/sharing-a-volume-on-windows-with-docker-toolbox/4953/2
  • Probieren Sie es aus, stellen Sie fest, dass es in Ihrem Fall nicht viel Sinn hat.
  • Lesen Sie die gesamte Seite hier https://github.com/docker/toolbox/issues/607 und probieren Sie alle auf der Seite aufgeführten Lösungen aus
  • Suchen Sie diese Seite (die Sie gerade lesen) und probieren Sie alle Lösungen aus anderen Kommentaren aus
  • Suchen Sie sich irgendwo Informationen, dass das Setzen der Umgebungsvariable COMPOSE_CONVERT_WINDOWS_PATHS = 1 das Problem lösen könnte.
  • Hören Sie einige Monate auf, nach der Lösung zu suchen
  • Gehen Sie zurück und überprüfen Sie die gleichen Links noch einmal
  • Weinen Sie tief
  • Fühle den Moment der Erleuchtung
  • Öffnen Sie VirtualBox (Sie haben es bereits zusammen mit den Docker-Tools installiert)
  • Erstellen Sie eine virtuelle Maschine mit einer zweiten Ethernet-Karte - überbrückt. Auf diese Weise erhält sie eine IP-Adresse von Ihrem Netzwerk (sie verfügt über eine IP-Adresse wie eine Docker-Maschine).
  • Installieren Sie Ubuntu LTS, das sehr aktuell ist (nicht älter als einige Monate).
  • Beachten Sie, dass das Automounting nicht wirklich funktioniert und die Integration unterbrochen wird (wie das Teilen der Zwischenablage usw.).
  • Virtuelle Maschine löschen
  • Geht raus und trinkt etwas
  • Mieten Sie ein teures Auto und fahren Sie mit hoher Geschwindigkeit auf die Autobahn
  • Zerstöre das Auto und stirb
  • Respawn vor deinem PC
  • Installieren Sie Ubuntu LTS, das älter als 1 Jahr ist
  • Versuchen Sie, Docker auszuführen
  • Beachten Sie, dass es nicht installiert ist
  • Installieren Sie das Docker von apt-get install docker
  • Installieren Sie das vorgeschlagene docker.io
  • Versuchen Sie, Docker-Compose auszuführen
  • Beachten Sie, dass es nicht installiert ist
  • apt get install docker-compose
  • Versuchen Sie, Ihr Projekt mit Docker-Compose auszuführen
  • Beachten Sie, dass es sich um eine alte Version handelt
  • Überprüfen Sie Ihre Leistungsstufe (sollte über 9000 liegen)
  • Suchen Sie nach der neuesten Version des Dockers und suchen Sie nach dem offiziellen Leitfaden https://docs.docker.com/install/linux/docker-ce/ubuntu/
  • Deinstallieren Sie den aktuellen Docker-Compose und das Docker.io
  • Installieren Sie das Docker mithilfe der offiziellen Anleitung https://docs.docker.com/install/linux/docker-ce/ubuntu/
  • Fügen Sie der virtuellen Maschine gemeinsame Verzeichnisse hinzu und stellen Sie Ihre Projektverzeichnisse automatisch ein (auf diese Weise haben Sie von Ubuntu aus Zugriff auf das Projektverzeichnis, sodass Sie jeden Docker-Befehl ausführen können.)
  • Erledigt
2
Grzegorz Gajos

freigabeordner VirtualBox-Toolbox und Windows 7 und Nodejs-Image-Container

using ... Docker Quickstart Terminal [QST] Windows Explorer [WE]

lasst uns beginnen...

  1. [QST] Öffnen Sie das Docker Quickstart Terminal

  2. [QST] stoppt die virtuelle Maschine

$ docker-machine stop

  1. [WE] einen Windows Explorer öffnen

  2. [WE] gehen Sie in das Installationsverzeichnis von virtualBox 

  3. [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

  1. Überprüfen Sie in der virtuellen Oracle-Maschine, ob der neue freigegebene Ordner angezeigt wurde

  2. [QST] Start der virtuellen Maschine

$ docker-machine start

  1. [QST] Führt Container Nodejs aus

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

  1. [QST] Öffnen Sie die Bash zum Container

docker exec -i -t nodejs/bin/bash

  1. [QST] Führen Sie das Verzeichnis aus und Sie sehen die freigegebenen Dateien
0
ivan rc

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

0
Kirill

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

0
Hugo Kokay