Я обнаружил некоторые интересные странности, пытаясь смонтировать образ докера в Windows.
Я создал .sh
сценарий, который монтирует папку проекта для запуска образа среды разработчика. Мне нужен один сценарий, который может запустить каждый разработчик, независимо от его машины. Все, что он делает, это запускает докер с текущей папкой проекта.
#!/usr/bin/env bash
docker run -it --rm -v D:\my\project\folder:/wkDir $IMAGE_TAG yarn dev
Работает нормально. Теперь план состоит в том, чтобы вызвать этот скрипт из npm
, поэтому я хотел бы, чтобы он работал относительно текущей папки. Попробуем другую версию.
docker run -it --rm -v $PWD:/wkDir $IMAGE_TAG yarn dev
Не работает с:
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. Что ;C
и откуда взялось?
Так что я делаю то, echo $PWD
что дает мне /d/my/project/folder
.
Интересно, поэтому $PWD
разрешается правильный путь в формате пути Linux, и кажется, что докер пытается перевести с него на правильный путь Windows, за исключением того, что это ;C
появляется из ниоткуда. И \
они /
...
Что именно здесь происходит?
Я получаю тот же результат в терминале VSCode git bash и powershell.
Обновление: я заметил, что .sh
при запуске в терминале PowerShell VSCode открывается отдельное cmd.exe
окно консоли, которое, кажется, запускает скрипт в git bash. Так что это может быть проблема с git bash.
"/${PWD}"
$ docker run -p 8080:3000 -v /$(pwd):/var/www -w //var/www node npm start
В конце концов я обнаружил, что мне пришлось использовать ведущую косую черту со скобками вместо фигурных скобок. Кроме того, для рабочего каталога мне потребовались две ведущие косые черты. К вашему сведению: это команда, которая мне нужна для Docker для веб-разработчиков на Pluralsightdocker run --rm -v /${PWD}/migrations:/flyway/sql --network xxx_default flyway
. Спасибо.Для меня решением было просто включить закрывающую косую черту
/
в конце любого пути .Например, вместо
/opt/apache-atlas-2.0.0/bin/atlas_start.py
... использовать
/opt/apache-atlas-2.0.0/bin/atlas_start.py/
источник
Монтирование текущего каталога в контейнер Docker в Windows 10 из Git Bash (MinGW) может завершиться ошибкой из-за преобразования пути POSIX. Любой путь, начинающийся с
/
, преобразуется в действительный путь Windows.Избегайте путей POSIX с помощью префикса
/
Чтобы пропустить преобразование пути, все пути POSIX должны иметь префикс с дополнительной косой чертой (
/
), включая/$(pwd)
.В Git Bash путь
//data/test.txt
не преобразуется, а в оболочках Linux//
(ведущая двойная косая черта) игнорируется и обрабатывается так же, как/
.Отключить преобразование пути
Отключите преобразование пути POSIX в Git Bash (MinGW) с помощью
MSYS_NO_PATHCONV
переменной среды.Преобразование пути можно отключить на командном уровне:
Преобразование пути можно отключить на уровне оболочки (или системы):
источник
Можете ли вы попробовать команду ниже -
источник
У меня действительно была такая же проблема. В зависимости от того, используете ли вы Git Bash, эта команда работает (на примере nginx):
docker container run --name имя-контейнера -v `pwd -W` / html: / usr / share / nginx / html -p 8000: 80 -d nginx
конечно, вы можете указать порт и каталог по своему желанию.
источник
У меня была такая же проблема с git bash, а не с командной строкой. Вместо этого ты можешь
источник
Прям у меня внизу работал. просто не используйте динамическую переменную.
источник