Configurei o Docker Desktop 2.1.0.5 mais recente no Windows 10 e criei e executei contêineres simples/triviais, ou seja, docker run --rm -v c:/Users:/data alpine ls /data
funciona bem.
No entanto, estou tendo problemas (1) para criar um volume vinculado a uma pasta no host do Windows e pedir a um contêiner do Linux para usá-lo; e (2) especificar um DockerFile para esse contêiner. Aqui está o que eu tentei:
- Criei um volume através do comando
docker volume create --driver local --opt type=none --opt device=c:\path\to\folder --opt o=bind test_vol
, e tentei montá-lo assim:docker run --rm -v test_vol:/data alpine ls /data
. Isso me dá o erro:
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Resposta de erro do daemon: erro ao montar o volume '/var/lib/docker/volumes/test_vol/_data': falha ao montar o volume local: monte c :\path\to\folder:/var/lib/docker/volumes/test_vol/_data, flags: 0x1000: nenhum tal arquivo ou diretório.
No entanto, se eu especificar essa pasta de host no docker run
comando sem passar por um volume criado anteriormente (como este: docker run --rm -v c:\path\to\folder:/data alpine ls /data
), funcionará bem.
- Especificar um DockerFile também é problemático. Se eu usar este comando:
docker run --rm --env-file c:\path\to\DockerFile -v c:\path\to\folder:/data alpine ls /data
, recebo este erro:
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: leia c:\path\to\DockerFile: O identificador é inválido. Consulte 'C:\Arquivos de Programas\Docker\Docker\Resources\bin\docker.exe run --help'.
- Pelo exposto, tentei mudar a direção das barras (
/
vs\
) e colocar os caminhos entre aspas, mas nada disso ajudou ou alterou a saída do erro. - Certifiquei-me de que "Drives Compartilhados" está ativado nas configurações da área de trabalho do Docker.
Estou muito confuso sobre como especificar esses caminhos no Docker para Windows. Alguém por favor pode aconselhar sobre como solucionar isso? Obrigada.
TLDR
Você deve usar o
/host_mnt/c/path/to/folder
formato de caminho (observe a letra da unidade em minúscula ).Aprofundado
Dependendo da versão do Docker Desktop para Windows, determinei o seguinte em relação aos formatos de caminho:
Portanto, o uso
C:\path\to\folder
deve funcionar nas versões 2.3.0.2 / 2.3.0.3 mais recentes. Se você ainda estiver na versão 2.1.0.5,//C/path/to/folder
deve funcionar.Se você observar o caminho ao inspecionar o volume criado (na v2.3.0.3):
O único formato de caminho que permanece o mesmo é
/host_mnt/c/path/to/folder
.Isso significa que, no docker-compose, se você usar qualquer outro formato e tentar reutilizar um volume já criado (ou seja, dois up consecutivos), receberá um erro:
Conclusão
Portanto, para ser compatível em todas as versões e ter um fluxo de trabalho satisfatório no Docker Compose, a melhor aposta é usar
/host_mnt/c/path/to/folder
(observe a letra minúscula do drive ):docker volume create --driver local --opt type=none --opt device=/host_mnt/c/path/to/folder --opt o=bind test_vol
docker run --rm -v test_vol:/data alpine ls /data
O mesmo vale para docker-compose: