Eu encontrei algumas estranhezas interessantes ao tentar montar uma imagem docker no Windows.
Eu criei um .sh
script que faz uma montagem da pasta do projeto para rodar nossa imagem de ambiente de desenvolvedor. Quero um script que todo desenvolvedor possa executar, independentemente de sua máquina. Tudo o que ele faz é executar o docker com a pasta do projeto atual.
#!/usr/bin/env bash
docker run -it --rm -v D:\my\project\folder:/wkDir $IMAGE_TAG yarn dev
Funciona bem. Agora, o plano é chamar esse script de npm
, então gostaria que funcionasse em relação à pasta atual. Vamos tentar outra versão.
docker run -it --rm -v $PWD:/wkDir $IMAGE_TAG yarn dev
Falha com:
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. O que é ;C
e de onde veio?
Então eu faço o echo $PWD
que me dá /d/my/project/folder
.
Interessante, então $PWD
resolve para o caminho correto no formato de caminho do Linux, e parece que o docker está tentando traduzir desse para o caminho correto do Windows, exceto que há isso ;C
que aparece do nada. E o \
são /
...
O que exatamente está acontecendo aqui?
Eu obtenho o mesmo resultado no terminal git bash e powershell do VSCode.
Atualização: notei que rodar o .sh
terminal do VSCode no PowerShell abre uma cmd.exe
janela de console separada que parece rodar o script no git bash. Portanto, este pode ser um problema do git bash.
"/${PWD}"
$ docker run -p 8080:3000 -v /$(pwd):/var/www -w //var/www node npm start
Acabei descobrindo que precisava usar a barra inicial com parênteses em vez de colchetes. Além disso, com o diretório de trabalho, eu precisava de duas barras iniciais. Para sua informação: este é o comando que eu precisava para o Docker para desenvolvedores da Web nodocker run --rm -v /${PWD}/migrations:/flyway/sql --network xxx_default flyway
. Obrigado.Para mim, a solução foi simplesmente incluir uma barra de fechamento
/
no final de todos os caminhos .Por exemplo, em vez de
/opt/apache-atlas-2.0.0/bin/atlas_start.py
...usar
/opt/apache-atlas-2.0.0/bin/atlas_start.py/
fonte
A montagem do diretório atual em um contêiner do Docker no Windows 10 a partir do Git Bash (MinGW) pode falhar devido a uma conversão de caminho POSIX. Qualquer caminho que comece com
/
é convertido em um caminho válido do Windows.Escape dos caminhos POSIX prefixando com
/
Para pular a conversão de caminho, todos os caminhos POSIX devem ser prefixados com uma barra extra (
/
), incluindo/$(pwd)
.No Git Bash, o caminho
//data/test.txt
não é convertido e nos shells do Linux//
(barra dupla inicial) é ignorado e tratado da mesma maneira que/
.Desative a conversão de caminho
Desative a conversão de caminho POSIX no Git Bash (MinGW) usando
MSYS_NO_PATHCONV
a variável de ambiente.A conversão de caminho pode ser desativada no nível de comando:
A conversão de caminho pode ser desativada no nível do shell (ou sistema):
fonte
Você pode tentar o comando abaixo -
fonte
Na verdade, eu tive o mesmo problema. Dependendo se você está usando Git Bash, esse comando funciona (usando nginx como exemplo):
docker container run --name container-name -v `pwd -W` / html: / usr / share / nginx / html -p 8000: 80 -d nginx
é claro que você pode especificar a porta e o diretório que desejar.
fonte
Eu tive o mesmo problema no git bash e não no prompt de comando. Você pode ao invés
fonte
Straight trabalhou para mim abaixo. apenas não use variável dinâmica.
fonte