Описание
Я использую Docker версии 1.12.5 в Windows 10 через Hyper-V и хочу использовать исполняемые файлы контейнера в качестве команд в текущем пути. Я создал образ Docker, который работает нормально, но у меня проблема с подключением текущего пути. Идея состоит в том, чтобы создать псевдоним и выполнить docker run --rm [...]
команду, чтобы ее можно было использовать в рамках всей системы в текущем каталоге.
Настроить
У меня есть диск E с папкой «test» и в ней папка «папка на хосте Windows», чтобы показать, что команда работает. Dockerfile создает каталог /data
, определяет его как VOLUME и WORKDIR.
Имея E:\test
текущий каталог в PowerShell и выполняя команду Docker с абсолютным путем, я могу видеть содержимое E:\test
:
PS E:\test> docker run --rm -it -v E:\test:/data mirkohaaser/docker-clitools ls -la
total 0
drwxr-xr-x 2 root root 0 Jan 4 11:45 .
drwxr-xr-x 2 root root 0 Jan 5 12:17 folder on windows host
проблема
Я хочу использовать текущий каталог, а не абсолютную нотацию. Я не мог использовать pwd в томе из-за разных сообщений об ошибках:
Пробуем с ($ pwd)
PS E:\test> docker run --rm -it -v ($pwd):/data mirkohaaser/docker-clitools ls -la
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error parsing reference: ":/data" is not a valid repository/tag.
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.
Пробуем с / ($ pwd)
PS E:\test> docker run --rm -it -v /($pwd):/data mirkohaaser/docker-clitools ls -la
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error parsing reference: "E:\\test" is not a valid repository/tag.
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.
Пробуем с \ ´pwd \ ´
PS E:\test> docker run --rm -it -v ´$pwd´:/data mirkohaaser/docker-clitools ls -la
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: Invalid bind mount spec "´E:\\test´:/data": invalid mode: /data.
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.
Пробуем с `pwd`
PS E:\test> docker run --rm -it -v `$pwd`:/data mirkohaaser/docker-clitools ls -la
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: create $pwd: "$pwd" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed.
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.
Каков правильный синтаксис монтирования текущего каталога как тома в Docker в Windows 10?
${PWD}
работает и в системах Unix (Linux, macOS). Примечание :pwd
= текущий рабочий каталог$(pwd)
что также будет работать в Linux (я думаю - непроверено)winpty docker run -it -v "/$(pwd -W):/usr/src/project" gcc:4.9
либоwinpty docker run -it -v "/$(cmd //c cd):/usr/src/project" gcc:4.9
.У меня это работает в PowerShell:
источник
PS C:\Users\X\Projects\docker_django> docker run --rm -v ${PWD}:/data alpine ls /data C:\Program Files\Docker Toolbox\docker.exe: Error response from daemon: invalid mode: /data. See 'C:\Program Files\Docker Toolbox\docker.exe run --help'.
Docker for Windows
вместоToolbox
.Для Git Bash для Windows (в ConEmu) у меня работает следующее (для контейнеров Docker Windows):
Обратите внимание на кавычку / обратные кавычки вокруг
pwd -W
!Со всеми другими вариантами PWD, которые я пробовал, я получил:
"Error response from daemon: invalid volume specification: ..."
Обновление: выше было для контейнеров Docker Windows, для контейнеров Linux используйте:
источник
pwd -W
: / usr / share / data atomgraph / fuseki --file = / usr / share / data / Mokyklu_sarasas.ttl / mokyklos Файл не найден: C: / tools / cmder / vendor /git-for-windows/usr/share/data/Mokyklu_sarasas.ttl`command`
Щелкните Применить . Вас могут попросить предоставить учетные данные пользователя.
Приведенная ниже команда теперь должна работать в PowerShell (командная строка не поддерживает
${PWD}
):docker run --rm -v ${PWD}:/data alpine ls /data
ВАЖНО : если / когда вы изменить свой пароль домена Windows , , то крепление перестанут работать тихо , то есть,
-v
будет работать , но контейнер не будет видеть ваш хост папки и файлы. Решение : вернитесь в Настройки, снимите флажки с общих дисков, Применить , проверьте их еще раз, Применить и введите новый пароль при появлении запроса.источник
Вот мой, который совместим как с Win10 docker-ce, так и с Win7 docker-toolbox. В последнее время я пишу это :).
Вы можете заметить, что я предпочитаю использовать / host_mnt / c вместо c: /, потому что иногда я сталкивался с проблемами на docker-ce Win 10 с c: /
источник
${MOUNT_PATH}
/c/Program Files/Docker Toolbox
Другие решения для Git Bash, предоставленные другими, у меня не работали. По-видимому, в настоящее время в Git для Windows есть ошибка / ограничение. Смотрите это и это .
Мне, наконец, удалось заставить его работать после того, как я нашел этот поток GitHub (который предоставляет некоторые дополнительные решения, если вам интересно, которые могут сработать для вас, но не для меня).
В итоге я использовал следующий синтаксис:
Обратите внимание на
MSYS_NO_PATHCONV=1
символы передdocker
командой и$(pwd)
- круглые скобки, строчные буквы pwd, без кавычек и обратных косых черт.Кроме того, я использую контейнеры Linux в Windows, если это важно.
Я тестировал это в новом Windows Terminal, ConEmu и GitBash, и все они у меня сработали.
источник
MSYS_NO_PATHCONV=1
команды? В противном случае мой целевой каталог монтирования был заполнен «c: / tools / cmder / vendor / git-for-windows»Эта команда должна это исправить.
docker run --rm -it -v
${PWD}:c:\data
mirkohaaser / docker-clitools{PWD} - текущая папка хоста. после
:
- это папка контейнера. Если установка выполнена правильно, файлы будут перечислены в директорииc:\data
контейнера.источник
Вам нужно заменить все обратные косые черты на прямые, поэтому измените
docker -v C: \ my \ folder: / mountlocation ...
в
docker -v C: / my / folder: / mountlocation ...
Обычно я вызываю докер из cmd-скрипта, где я хочу, чтобы папка для монтирования была относительно скрипта, который я вызываю, поэтому в этом скрипте я делаю это ...
источник
Командная строка (
Cmd.exe
)Когда Docker CLI используется из Windows
Cmd.exe
, используйте%cd%
для монтирования текущего каталога:Git Bash (MinGW)
Когда Docker CLI используется из Git Bash (MinGW), монтирование текущего каталога может завершиться ошибкой из-за преобразования пути POSIX: добавляется подключенный том Docker; C в конец пути Windows при переводе из пути в стиле Linux .
Избегайте путей POSIX с помощью префикса
/
Чтобы пропустить преобразование пути, пути POSIX должны иметь префикс косой черты (
/
), чтобы в начале была двойная косая черта (//
), включая/$(pwd)
Отключить преобразование пути
Отключите преобразование пути POSIX в Git Bash (MinGW), установив
MSYS_NO_PATHCONV=1
переменную среды на уровне командили уровень оболочки (системы)
источник
Git bash
echo ${PWD}
результат:cmd или PowerShell
echo ${PWD}
результат:как мы видим в cmd или PowerShell $ {PWD} не будет работать
источник