Montar el directorio actual como un volumen en Docker en Windows 10


Descripción

Estoy usando Docker versión 1.12.5 en Windows 10 a través de Hyper-V y quiero usar ejecutables de contenedor como comandos en la ruta actual. Construí una imagen de Docker que se está ejecutando bien, pero tengo un problema para montar la ruta actual. La idea es crear un alias y hacer un comando docker run --rm [...] para que pueda ser utilizado en todo el sistema en el directorio actual.

Setup

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 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:

Tratando con (pw 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'.

Tratando con / (pw 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'.

Intentando 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'.

Tratando 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?

Author: Peter Mortensen, 2017-01-05

3 answers

En la Línea de comandos de Windows (cmd), puede montar el directorio actual de la siguiente manera:

docker run --rm -it -v %cd%:/usr/src/project gcc:4.9

En PowerShell, se usa ${PWD}, que le da el directorio actual:

docker run --rm -it -v ${PWD}:/usr/src/project gcc:4.9

Multiplataforma

Las siguientes dos opciones funcionarán tanto en PowerShell como en Linux:

docker run --rm -it -v ${PWD}:/usr/src/project gcc:4.9

docker run --rm -it -v $(pwd):/usr/src/project gcc:4.9

 80
Author: ETL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-29 22:50:29

Esto funciona para mí en PowerShell:

docker run --rm -v ${PWD}:/data alpine ls /data
 15
Author: friism,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-05 16:27:07

Este comando debería arreglarlo.

Docker run rm rm-it-v ${PWD}:c:\data mirkohaaser / docker-clitools

{PWD} es la carpeta actual del host. después de : está la carpeta contenedor. Si el montaje es correcto, los archivos se listarán en el director c:\data en el contenedor.

 0
Author: Blue Clouds,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-20 06:12:16