Beschreibung
Ich verwende Docker Version 1.12.5 unter Windows 10 über Hyper-V und möchte ausführbare Container-Dateien als Befehle im aktuellen Pfad verwenden. Ich habe ein Docker-Image erstellt, das einwandfrei funktioniert, aber ich habe ein Problem beim Mounten des aktuellen Pfads. Die Idee ist, einen Alias zu erstellen und einen docker run --rm [...]
Befehl auszuführen, damit er systemweit im aktuellen Verzeichnis verwendet werden kann.
Konfiguration
Ich habe ein Laufwerk E mit einem Ordner "test" und dort einen Ordner namens "Ordner auf Windows-Host", um zu zeigen, dass der Befehl funktioniert. Die Docker-Datei erstellt das Verzeichnis /data
und definiert es als VOLUME und WORKDIR.
Als E:\test
aktuelles Verzeichnis in PowerShell und Ausführen des Docker-Befehls mit einem absoluten Pfad kann ich den Inhalt von sehen E:\test
:
PS E:\test> docker run --rm -it -v E:\test:/data mirkohaaser/docker-clitools ls -la
total 0
drwxr-xr-x 2 root root 0 Jan 4 11:45 .
drwxr-xr-x 2 root root 0 Jan 5 12:17 folder on windows host
Problem
Ich möchte das aktuelle Verzeichnis verwenden und keine absolute Notation. Ich konnte pwd im Volume wegen verschiedener Fehlermeldungen nicht verwenden:
Versuchen mit ($ pwd)
PS E:\test> docker run --rm -it -v ($pwd):/data mirkohaaser/docker-clitools ls -la
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error parsing reference: ":/data" is not a valid repository/tag.
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.
Versuch mit / ($ pwd)
PS E:\test> docker run --rm -it -v /($pwd):/data mirkohaaser/docker-clitools ls -la
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error parsing reference: "E:\\test" is not a valid repository/tag.
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.
Versuch mit \ ´pwd \ ´
PS E:\test> docker run --rm -it -v ´$pwd´:/data mirkohaaser/docker-clitools ls -la
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: Invalid bind mount spec "´E:\\test´:/data": invalid mode: /data.
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.
Versuchen mit "pwd"
PS E:\test> docker run --rm -it -v `$pwd`:/data mirkohaaser/docker-clitools ls -la
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: create $pwd: "$pwd" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed.
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.
Wie lautet die korrekte Syntax zum Mounten des aktuellen Verzeichnisses als Volume in Docker unter Windows 10?
${PWD}
funktioniert auch auf Unix-Systemen (Linux, macOS). Hinweis :pwd
= aktuelles Arbeitsverzeichnis$(pwd)
die auch unter Linux funktionieren würden (ich denke - ungetestet)winpty docker run -it -v "/$(pwd -W):/usr/src/project" gcc:4.9
oder seinwinpty docker run -it -v "/$(cmd //c cd):/usr/src/project" gcc:4.9
.Dies funktioniert bei mir in PowerShell:
quelle
PS C:\Users\X\Projects\docker_django> docker run --rm -v ${PWD}:/data alpine ls /data C:\Program Files\Docker Toolbox\docker.exe: Error response from daemon: invalid mode: /data. See 'C:\Program Files\Docker Toolbox\docker.exe run --help'.
Docker for Windows
anstelle vonToolbox
.Für Git Bash für Windows (in ConEmu) funktioniert Folgendes für mich (für Docker Windows-Container):
Beachten Sie die Backticks / einfachen Anführungszeichen um
pwd -W
!Mit allen anderen Varianten von PWD, die ich ausprobiert habe, habe ich erhalten:
"Error response from daemon: invalid volume specification: ..."
Update: Das Obige war für Docker Windows-Container, für Linux-Container:
quelle
pwd -W
: / usr / share / data atomgraph / fuseki --file = / usr / share / data / Mokyklu_sarasas.ttl / mokyklos ausgeführt hat. Datei nicht gefunden: C: / tools / cmder / vendor /git-for-windows/usr/share/data/Mokyklu_sarasas.ttl`command`
Klicken Sie auf Übernehmen . Möglicherweise werden Sie aufgefordert, Benutzeranmeldeinformationen anzugeben.
Der folgende Befehl sollte jetzt unter PowerShell funktionieren (Eingabeaufforderung wird nicht unterstützt
${PWD}
):docker run --rm -v ${PWD}:/data alpine ls /data
WICHTIG : wenn / falls Sie Ihre Windows - Domäne - Kennwort ändern, stoppt die Montage arbeitet geräuschlos , das ist
-v
wird funktionieren , aber der Behälter nicht sehen Ihre Host - Ordner und Dateien. Lösung : Gehen Sie zurück zu Einstellungen, deaktivieren Sie die freigegebenen Laufwerke, Übernehmen Sie sie , überprüfen Sie sie erneut , Übernehmen Sie und geben Sie das neue Kennwort ein, wenn Sie dazu aufgefordert werden.quelle
Hier ist meine, die sowohl für Win10 Docker-CE als auch für Win7 Docker-Toolbox kompatibel ist. Zur Zeit schreibe ich das :).
Sie können feststellen, dass ich lieber / host_mnt / c anstelle von c: / verwende, da ich manchmal Probleme mit Docker-ce Win 10 mit c: / hatte
quelle
${MOUNT_PATH}
löst sich als/c/Program Files/Docker Toolbox
Andere von anderen bereitgestellte Lösungen für Git Bash haben bei mir nicht funktioniert. Anscheinend gibt es derzeit einen Fehler / eine Einschränkung in Git für Windows. Sehen Sie dies und das .
Nachdem ich diesen GitHub-Thread gefunden hatte, gelang es mir endlich, ihn zum Laufen zu bringen (der bei Interesse einige zusätzliche Lösungen bietet, die für Sie funktionieren könnten, für mich aber nicht).
Am Ende habe ich die folgende Syntax verwendet:
Beachten Sie die
MSYS_NO_PATHCONV=1
vor demdocker
Befehl stehenden und$(pwd)
- runden Klammern, pwd in Kleinbuchstaben, keine Anführungszeichen, keine umgekehrten Schrägstriche.Außerdem verwende ich Linux-Container unter Windows, wenn das wichtig ist.
Ich habe dies im neuen Windows-Terminal ConEmu und GitBash getestet und alle haben für mich funktioniert.
quelle
MSYS_NO_PATHCONV=1
? Andernfalls wurde mein Ziel-Mount-Verzeichnis mit "c: / tools / cmder / vendor / git-for-windows" gefülltDieser Befehl sollte das Problem beheben.
Docker-Lauf --rm -it -v
${PWD}:c:\data
mirkohaaser / Docker-Clitools{PWD} ist der aktuelle Hostordner. Nach dem
:
ist der Containerordner. Wenn die Montage korrekt ist, werden die Dateien im Directorc:\data
im Container aufgelistet .quelle
Sie müssen alle hinteren Schrägstriche gegen vordere Schrägstriche austauschen, also ändern Sie sie
Docker -v C: \ my \ Ordner: / mountlocation ...
zu
Docker -v C: / my / Ordner: / mountlocation ...
Normalerweise rufe ich Docker von einem Cmd-Skript aus auf, in dem der Ordner relativ zu dem Skript, das ich aufrufe, bereitgestellt werden soll. In diesem Skript mache ich dies ...
quelle
Eingabeaufforderung (
Cmd.exe
)Wenn die Docker-CLI unter Windows
Cmd.exe
verwendet wird%cd%
, stellen Sie das aktuelle Verzeichnis bereit:Git Bash (MinGW)
Wenn die Docker-CLI über Git Bash (MinGW) verwendet wird, schlägt das Mounten des aktuellen Verzeichnisses möglicherweise aufgrund einer POSIX- Pfadkonvertierung fehl: Das von Docker gemountete Volume fügt beim Übersetzen vom Linux-Pfad C das Ende des Windows-Pfads hinzu .
Entkommen Sie den POSIX-Pfaden, indem Sie ein Präfix mit
/
Um die Pfadkonvertierung zu überspringen, muss POSIX-Pfaden der Schrägstrich (
/
) vorangestellt werden, um einen führenden doppelten Schrägstrich (//
) zu erhalten, einschließlich/$(pwd)
Deaktivieren Sie die Pfadkonvertierung
Deaktivieren Sie die POSIX-Pfadkonvertierung in Git Bash (MinGW), indem Sie die
MSYS_NO_PATHCONV=1
Umgebungsvariable auf Befehlsebene festlegenoder Shell (System) Ebene
quelle
Git Bash
echo ${PWD}
Ergebnis:cmd oder PowerShell
echo ${PWD}
Ergebnis:Wie wir in cmd oder PowerShell sehen, funktioniert $ {PWD} nicht
quelle