Добавленный объем докеры добавляет: 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