Descripción
Uso la versión 1.12.5 de Docker en Windows 10 a través de Hyper-V y quiero usar archivos ejecutables de contenedores como comandos en la ruta actual. Creé una imagen de Docker que funciona bien, pero tengo un problema para montar la ruta actual. La idea es crear un alias y hacer un docker run --rm [...]
para que pueda usarse en todo el sistema en el directorio actual.
Configuración
Tengo una unidad E con una carpeta "prueba" y allí una carpeta llamada "carpeta en el host de Windows" para mostrar que el comando está funcionando. El Dockerfile crea el directorio /data
, lo define como VOLUME y WORKDIR.
Teniendo E:\test
como el directorio actual en PowerShell y ejecutando el comando Docker con una ruta absoluta, puedo ver el contenido 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
Quiero usar el directorio actual y no una notación absoluta. No pude usar pwd en el volumen debido a diferentes mensajes de error:
Probando con ($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'.
Probando con /($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'.
Probando con \´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'.
Probando con `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'.
¿Cuál es la sintaxis correcta para montar el directorio actual como un volumen en Docker en Windows 10?
En la línea de comandos de Windows ( cmd
), puede montar el directorio actual así:
docker run --rm -it -v %cd%:/usr/src/project gcc:4.9
En PowerShell, usa ${PWD}
, que le brinda el directorio actual:
docker run --rm -it -v ${PWD}:/usr/src/project gcc:4.9
En Linux:
docker run --rm -it -v $(pwd):/usr/src/project gcc:4.9
Plataforma cruzada
Las siguientes opciones funcionarán tanto en PowerShell como en Linux (al menos Ubuntu):
docker run --rm -it -v ${PWD}:/usr/src/project gcc:4.9 docker run --rm -it -v $(pwd):/usr/src/project gcc:4.9
Esto funciona para mí en PowerShell:
docker run --rm -v ${PWD}:/data alpine ls /data
Haga clic en Aplicar . Es posible que se le solicite proporcionar credenciales de usuario.
El siguiente comando ahora debería funcionar en PowerShell (el símbolo del sistema no es compatible ${PWD}
):
docker run --rm -v ${PWD}:/data alpine ls /data
IMPORTANTE : si/cuando cambia la contraseña de su dominio de Windows, el montaje dejará de funcionar en silencio , es decir, -v
funcionará pero el contenedor no verá las carpetas y los archivos de su host. Solución : vuelva a Configuración, desmarque las unidades compartidas, Aplicar , vuelva a marcarlas, Aplicar e ingrese la nueva contraseña cuando se le solicite.