Ich habe eine interessante Verrücktheit gefunden, als ich versucht habe, ein Docker-Image unter Windows zu mounten.
Ich habe ein .sh
Skript erstellt, das einen Mount des Projektordners ausführt, um unser Image der Entwicklerumgebung auszuführen. Ich möchte ein Skript, das jeder Entwickler ausführen kann, unabhängig von seinem Computer. Es wird lediglich Docker mit dem aktuellen Projektordner ausgeführt.
#!/usr/bin/env bash
docker run -it --rm -v D:\my\project\folder:/wkDir $IMAGE_TAG yarn dev
Läuft in Ordnung. Jetzt ist geplant, dieses Skript von aufzurufen npm
, damit dies relativ zum aktuellen Ordner funktioniert. Versuchen wir es mit einer anderen Version.
docker run -it --rm -v $PWD:/wkDir $IMAGE_TAG yarn dev
Schlägt fehl mit:
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from
daemon: Mount denied:
The source path "D:/my/project/folder;C"
doesn't exist and is not known to Docker.
Wat. Was ;C
und woher kommt es?
Also mache ich echo $PWD
was mir gibt /d/my/project/folder
.
Interessant, also wird $PWD
der richtige Pfad im Linux-Pfadformat aufgelöst, und es scheint, als würde Docker versuchen, diesen Pfad in den richtigen Windows-Pfad zu übersetzen, außer es gibt diesen ;C
, der aus dem Nichts erscheint. Und das \
sind /
...
Was genau ist hier los?
Ich erhalte das gleiche Ergebnis in VSCodes Terminal Git Bash und Powershell.
Update: Ich habe festgestellt, dass beim .sh
Ausführen des PowerShell-Terminals von VSCode ein separates cmd.exe
Konsolenfenster geöffnet wird, in dem das Skript in Git Bash ausgeführt zu werden scheint. Dies könnte also ein Git-Bash-Problem sein.
"/${PWD}"