Descrição
Estou usando o Docker versão 1.12.5 no Windows 10 via Hyper-V e quero usar executáveis de contêiner como comandos no caminho atual. Construí uma imagem Docker que está funcionando bem, mas tenho um problema para montar o caminho atual. A ideia é criar um alias e fazer um docker run --rm [...]
comando para que possa ser usado em todo o sistema no diretório atual.
Configuração
Eu tenho um drive E com uma pasta "test" e nela uma pasta chamada "folder on windows host" para mostrar que o comando está funcionando. O Dockerfile cria o diretório /data
, define-o como VOLUME e WORKDIR.
Tendo E:\test
como o diretório atual no PowerShell e executando o comando Docker com um caminho absoluto, posso ver o conteúdo de 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
Problema
Desejo usar o diretório atual e não uma notação absoluta. Não consegui usar o pwd no volume devido a diferentes mensagens de erro:
Tentando com ($ 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'.
Tentando com / ($ 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'.
Tentando com \ ´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'.
Tentando com `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'.
Qual é a sintaxe correta para montar o diretório atual como um volume no Docker no Windows 10?
${PWD}
também funciona em sistemas Unix (Linux, macOS). Nota :pwd
= diretório de trabalho atual$(pwd)
que também funcionaria no Linux (eu acho - não testado)winpty docker run -it -v "/$(pwd -W):/usr/src/project" gcc:4.9
ouwinpty docker run -it -v "/$(cmd //c cd):/usr/src/project" gcc:4.9
.Isso funciona para mim no PowerShell:
fonte
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
vez deToolbox
.Para Git Bash para Windows (em ConEmu), o seguinte funciona para mim (para contêineres Docker Windows):
Observe as crases / crases ao redor
pwd -W
!Com todas as outras variações de PWD que tentei, recebi:
"Error response from daemon: invalid volume specification: ..."
Atualização: o acima foi para contêineres Docker Windows, para contêineres Linux usar:
fonte
pwd -W
: / usr / share / data atomgraph / fuseki --file = / usr / share / data / Mokyklu_sarasas.ttl / mokyklos Arquivo não encontrado: C: / tools / cmder / vendor /git-for-windows/usr/share/data/Mokyklu_sarasas.ttl`command`
Clique em Aplicar . Você pode ser solicitado a fornecer credenciais de usuário.
O comando abaixo agora deve funcionar no PowerShell (prompt de comando não suporta
${PWD}
):docker run --rm -v ${PWD}:/data alpine ls /data
IMPORTANTE : se / quando você alterar sua senha de domínio do Windows, a montagem irá parar de funcionar silenciosamente , ou seja,
-v
irá funcionar, mas o contêiner não verá suas pastas e arquivos do host. Solução : volte para Configurações, desmarque os drives compartilhados, Aplicar , marque-os novamente, Aplicar e digite a nova senha quando solicitado.fonte
Aqui está o meu que é compatível com Win10 docker-ce e Win7 docker-toolbox. Pelo menos no momento estou escrevendo isto :).
Você pode notar que prefiro usar / host_mnt / c em vez de c: / porque às vezes encontrei problemas no docker-ce Win 10 com c: /
fonte
${MOUNT_PATH}
resolve como/c/Program Files/Docker Toolbox
Outras soluções para Git Bash fornecidas por outros não funcionaram para mim. Aparentemente, existe atualmente um bug / limitação no Git para Windows. Veja isso e isso .
Eu finalmente consegui fazê-lo funcionar depois de encontrar este thread do GitHub (que fornece algumas soluções adicionais se você estiver interessado, que podem funcionar para você, mas não funcionou para mim).
Acabei usando a seguinte sintaxe:
Observe o
MSYS_NO_PATHCONV=1
na frente dodocker
comando e$(pwd)
- colchetes, pwd minúsculas, sem aspas, sem barras invertidas.Além disso, estou usando contêineres Linux no Windows, se isso for importante.
Eu testei isso no novo Windows Terminal, ConEmu e GitBash, e todos eles funcionaram para mim.
fonte
MSYS_NO_PATHCONV=1
opção de comando? Caso contrário, meu diretório de montagem de destino foi preenchido com "c: / tools / cmder / vendor / git-for-windows"Este comando deve corrigir isso.
docker run --rm -it -v
${PWD}:c:\data
mirkohaaser / docker-clitools{PWD} é a pasta atual do host. após o
:
é a pasta do contêiner. Se a montagem estiver correta, os arquivos serão listados no direcionadorc:\data
do contêiner.fonte
Você precisa trocar todas as barras invertidas por barras normais, então mude
docker -v C: \ my \ folder: / mountlocation ...
para
docker -v C: / my / folder: / mountlocation ...
Normalmente chamo o docker de um script cmd onde desejo que a pasta seja montada em relação ao script que estou chamando, então nesse script eu faço isso ...
fonte
Prompt de comando (
Cmd.exe
)Quando a Docker CLI é usada no Windows
Cmd.exe
, use%cd%
para montar o diretório atual:Git Bash (MinGW)
Quando o Docker CLI é usado a partir do Git Bash (MinGW), a montagem do diretório atual pode falhar devido a uma conversão de caminho POSIX: o volume montado no Docker adiciona; C ao final do caminho do Windows ao traduzir do caminho do estilo linux .
Escape dos caminhos POSIX prefixando com
/
Para pular a conversão de caminho, os caminhos POSIX devem ser prefixados com a barra (
/
) para ter uma barra dupla inicial (//
), incluindo/$(pwd)
Desative a conversão de caminho
Desative a conversão de caminho POSIX no Git Bash (MinGW) definindo
MSYS_NO_PATHCONV=1
a variável de ambiente no nível de comandoou nível de shell (sistema)
fonte
Git bash
echo ${PWD}
resultado:cmd ou PowerShell
echo ${PWD}
resultado:como vemos em cmd ou PowerShell $ {PWD} não funcionará
fonte