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}"
$ docker run -p 8080:3000 -v /$(pwd):/var/www -w //var/www node npm start
Ich stellte schließlich fest, dass ich den führenden Schrägstrich mit Klammern anstelle von Klammern verwenden musste. Außerdem brauchte ich für das Arbeitsverzeichnis zwei führende Schrägstriche. Zu Ihrerdocker run --rm -v /${PWD}/migrations:/flyway/sql --network xxx_default flyway
. Vielen Dank.Für mich bestand die Lösung einfach darin,
/
am Ende eines Pfades einen abschließenden Schrägstrich einzufügen .ZB statt
/opt/apache-atlas-2.0.0/bin/atlas_start.py
...verwenden
/opt/apache-atlas-2.0.0/bin/atlas_start.py/
quelle
Das Mounten des aktuellen Verzeichnisses in einen Docker-Container in Windows 10 von Git Bash (MinGW) kann aufgrund einer POSIX-Pfadkonvertierung fehlschlagen. Jeder Pfad, der mit beginnt,
/
wird in einen gültigen Windows-Pfad konvertiert.Entkommen Sie den POSIX-Pfaden, indem Sie ein Präfix mit
/
Um die Pfadkonvertierung zu überspringen, muss allen POSIX-Pfaden der zusätzliche führende Schrägstrich (
/
) vorangestellt werden , einschließlich/$(pwd)
.In Git Bash wird der Pfad
//data/test.txt
nicht konvertiert und in Linux-Shells//
(führender doppelter Schrägstrich) wird ignoriert und genauso behandelt wie/
.Deaktivieren Sie die Pfadkonvertierung
Deaktivieren Sie die POSIX-Pfadkonvertierung in Git Bash (MinGW) mithilfe der
MSYS_NO_PATHCONV
Umgebungsvariablen.Die Pfadkonvertierung kann auf Befehlsebene deaktiviert werden:
Die Pfadkonvertierung kann auf Shell- (oder System-) Ebene deaktiviert werden:
quelle
Können Sie unten Befehl versuchen -
quelle
Ich hatte tatsächlich das gleiche Problem. Je nachdem, ob Sie Git Bash verwenden, funktioniert dieser Befehl (am Beispiel von nginx):
Docker-Container ausführen - Name Containername -v `pwd -W` / html: / usr / share / nginx / html -p 8000: 80 -d nginx
Natürlich können Sie den Port und das Verzeichnis nach Ihren Wünschen angeben.
quelle
Ich hatte das gleiche Problem bei Git Bash und nicht bei der Eingabeaufforderung. Sie können stattdessen
quelle
Gerade für mich unten gearbeitet. Verwenden Sie einfach keine dynamische Variable.
quelle