Przy próbie zamontowania obrazu Dockera w systemie Windows znalazłem kilka interesujących dziwactw.
Stworzyłem .sh
skrypt, który wykonuje montowanie folderu projektu, aby uruchomić nasz obraz środowiska deweloperskiego. Potrzebuję jednego skryptu, który może uruchomić każdy programista, niezależnie od komputera. Wszystko, co robi, to uruchamia docker z bieżącym folderem projektu.
#!/usr/bin/env bash
docker run -it --rm -v D:\my\project\folder:/wkDir $IMAGE_TAG yarn dev
Działa dobrze. Teraz planujemy wywołać ten skrypt z npm
, więc chciałbym, aby działał on względem bieżącego folderu. Wypróbujmy inną wersję.
docker run -it --rm -v $PWD:/wkDir $IMAGE_TAG yarn dev
Zawodzi z:
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. Co ;C
i skąd się wzięło?
Więc robię, echo $PWD
co mi daje /d/my/project/folder
.
Interesujące, więc $PWD
rozpoznaje poprawną ścieżkę w formacie ścieżki Linuksa i wygląda na to, że docker próbuje przetłumaczyć ją na właściwą ścieżkę okna, z wyjątkiem tego, ;C
że pojawia się znikąd. A \
są /
...
Co tu się właściwie dzieje?
Otrzymuję ten sam wynik w terminalowym git bash i PowerShell VSCode.
Aktualizacja: Zauważyłem, że uruchomienie .sh
terminalu PowerShell w VSCode otwiera osobne cmd.exe
okno konsoli, które wydaje się uruchamiać skrypt w git bash. Więc może to być problem z git bash.
"/${PWD}"
$ docker run -p 8080:3000 -v /$(pwd):/var/www -w //var/www node npm start
W końcu stwierdziłem, że zamiast nawiasów klamrowych musiałem użyć wiodącego ukośnika z nawiasami. Ponadto w katalogu roboczym potrzebowałem dwóch wiodących ukośników. FYI: to jest polecenie, którego potrzebowałem dla Dockera dla programistów sieci Web w Pluralsightdocker run --rm -v /${PWD}/migrations:/flyway/sql --network xxx_default flyway
. Dziękuję Ci.Dla mnie rozwiązaniem było po prostu dodanie zamykającego ukośnika
/
na końcu każdej ścieżki .Np. Zamiast
/opt/apache-atlas-2.0.0/bin/atlas_start.py
...posługiwać się
/opt/apache-atlas-2.0.0/bin/atlas_start.py/
źródło
Montowanie bieżącego katalogu do kontenera Docker w systemie Windows 10 z Git Bash (MinGW) może się nie powieść z powodu konwersji ścieżki POSIX. Każda ścieżka zaczynająca się od
/
jest konwertowana na prawidłową ścieżkę systemu Windows.Wyjdź ze ścieżek POSIX, poprzedzając je przedrostkiem
/
Aby pominąć konwersję ścieżki, wszystkie ścieżki POSIX muszą być poprzedzone dodatkowym wiodącym ukośnikiem (
/
), w tym/$(pwd)
.W Git Bash ścieżka
//data/test.txt
nie jest konwertowana, aw powłokach Linuksa//
(wiodący podwójny ukośnik) jest ignorowana i traktowana tak samo jak/
.Wyłącz konwersję ścieżki
Wyłącz konwersję ścieżki POSIX w Git Bash (MinGW) przy użyciu
MSYS_NO_PATHCONV
zmiennej środowiskowej.Konwersję ścieżki można wyłączyć na poziomie poleceń:
Konwersję ścieżki można wyłączyć na poziomie powłoki (lub systemu):
źródło
Czy możesz spróbować poniższe polecenie -
źródło
Właściwie miałem ten sam problem. W zależności od tego, czy używasz Git Bash, to polecenie działa (na przykładzie nginx):
docker container run --name nazwa-kontenera -v `pwd -W` / html: / usr / share / nginx / html -p 8000: 80 -d nginx
oczywiście możesz określić port i katalog według własnego uznania.
źródło
Miałem ten sam problem w git bash, a nie w wierszu polecenia. Możesz zamiast tego
źródło
Prosto pracował dla mnie poniżej. po prostu nie używaj zmiennej dynamicznej.
źródło