Добавленный объем докеры добавляет: C до конца пути к окну при переводе из пути стиля linux

Я обнаружил интересную странность при попытке установить изображение докеров в окнах.

Я создал сценарий .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, и кажется, что docker пытается перевести с этого на правильный путь к окну, за исключением этого ;C который появляется из ниоткуда. И \ are /...

Что именно здесь происходит?

Я получаю тот же результат в терминале VSCode git bash и powershell.

Обновление: я заметил, что запуск .sh в терминале powershell VSCode открывает отдельное окно консоли cmd.exe которое, похоже, запускает скрипт в git bash. Так что это может быть проблема git bash.

Ответы

Ответ 1

Итак, с некоторыми дополнительными поисками я нашел эти три темы, связанные с git-bash, испорчившими монтирование docker:

https://forums.docker.com/t/weird-error-under-git-bash-msys-solved/9210 https://github.com/moby/moby/issues/24029#issuecomment-250412919

Когда я смотрю документацию Mingw о преобразовании пути, используемом git-bash, я нахожу эту таблицу синтаксиса: http://www.mingw.org/wiki/Posix_path_conversion

Один из которых выводит в формате: x;x;C:\MinGW\msys\1.0\x. Обратите внимание на ;C в нем. Если git-bash пытается быть умным, набирает синтаксис и выводит путь с этим форматом, это объясняет это.

Решение состоит в том, чтобы избежать преобразования пути, используя префикс с /. Итак, рабочая команда docker для запуска docker из git-bash с существующим рабочим каталогом:

docker run -it --rm -v /${PWD}:/wkDir $IMAGE_TAG yarn dev

Ответ 2

Для меня решение было просто включить закрывающую косую черту / в конце любого пути.

Например. вместо

/opt/apache-atlas-2.0.0/bin/atlas_start.py

... использовать

/opt/apache-atlas-2.0.0/bin/atlas_start.py/

Ответ 3

Можете ли вы попробовать команду ниже -

docker run -it --rm -v %cd%:/wkDir $IMAGE_TAG yarn dev

Ответ 4

У меня фактически была та же самая проблема. В зависимости от того, используете ли вы Git Bash, эта команда работает (на примере nginx):

запуск Docker-контейнера --name имя контейнера -v 'pwd -W'/html: /usr/share/nginx/html -p 8000: 80 -d nginx

Конечно, вы можете указать порт и каталог по своему желанию.

Ответ 5

У меня была такая же проблема на git bash, а не в командной строке. Вы можете вместо

docker run -it --rm -v "/${PWD}/D:\my\project\folder":/wkDir $IMAGE_TAG yarn dev

Ответ 6

Прямо у меня сработало ниже. просто не используйте динамическую переменную.

docker run --rm -u root -p 8080:8080 -v jenkins-data/:/var/jenkins_home -v /var/run/docker.sock/:/var/run/docker.sock -v /Users/<YOUR USER NAME>/:/home jenkinsci/blueocean