Descripción
Estoy usando la versión 1.12.5 de Docker en Windows 10 a través de Hyper-V y quiero usar ejecutables de contenedor 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 ejecutar un docker run --rm [...]
comando para que pueda usarse en todo el sistema en el directorio actual.
Preparar
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:
Probar 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'.
Probar 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'.
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'.
Probar 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?
${PWD}
también funciona en sistemas Unix (Linux, macOS). Nota :pwd
= directorio de trabajo actual$(pwd)
también funcionarían en Linux (creo que, no probado)winpty docker run -it -v "/$(pwd -W):/usr/src/project" gcc:4.9
owinpty docker run -it -v "/$(cmd //c cd):/usr/src/project" gcc:4.9
.Esto funciona para mí en PowerShell:
fuente
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
lugar deToolbox
.Para Git Bash para Windows (en ConEmu), lo siguiente me funciona (para contenedores de Docker Windows):
Nota la comillas inversas / comillas inversas alrededor
pwd -W
!Con todas las demás variaciones de PWD que he probado, he recibido:
"Error response from daemon: invalid volume specification: ..."
Actualización: lo anterior fue para contenedores Docker Windows, para uso de contenedores Linux:
fuente
pwd -W
: / usr / share / data atomgraph / fuseki --file = / usr / share / data / Mokyklu_sarasas.ttl / mokyklos Archivo no encontrado: C: / tools / cmder / vendor /git-for-windows/usr/share/data/Mokyklu_sarasas.ttl`command`
Haga clic en Aplicar . Es posible que se le solicite que proporcione credenciales de usuario.
El siguiente comando debería funcionar ahora en PowerShell (el símbolo del sistema no es compatible
${PWD}
):docker run --rm -v ${PWD}:/data alpine ls /data
IMPORTANTE : si / cuando cambia su contraseña de dominio de Windows, el montaje dejará de funcionar silenciosamente , es decir,
-v
funcionará pero el contenedor no verá sus carpetas y archivos de host. Solución : vuelva a Configuración, desmarque las unidades compartidas, Aplicar , verifíquelas nuevamente, Aplicar e ingrese la nueva contraseña cuando se le solicite.fuente
Aquí está el mío, que es compatible con Win10 docker-ce y Win7 docker-toolbox. Por último, en ese momento estoy escribiendo esto :).
Puede notar que prefiero usar / host_mnt / c en lugar de c: / porque a veces encontré problemas en docker-ce Win 10 con c: /
fuente
${MOUNT_PATH}
resuelve como/c/Program Files/Docker Toolbox
Otras soluciones para Git Bash proporcionadas por otros no funcionaron para mí. Aparentemente, actualmente hay un error / limitación en Git para Windows. Mira esto y esto .
Finalmente logré que funcionara después de encontrar este hilo de GitHub (que proporciona algunas soluciones adicionales si está interesado, que podría funcionar para usted, pero no para mí).
Terminé usando la siguiente sintaxis:
Tenga
MSYS_NO_PATHCONV=1
en cuenta el delante deldocker
comando y$(pwd)
- corchetes, pwd en minúsculas, sin comillas, sin barras invertidas.Además, estoy usando contenedores de Linux en Windows si eso importa ...
Probé esto en la nueva Terminal de Windows, ConEmu y GitBash, y todos funcionaron para mí.
fuente
MSYS_NO_PATHCONV=1
opción de comando? De lo contrario, mi directorio de montaje de destino se llenó con "c: / tools / cmder / vendor / git-for-windows"Este comando debería solucionarlo.
docker ejecutar --rm -it -v
${PWD}:c:\data
mirkohaaser / docker-clitools{PWD} es la carpeta actual del host. después de
:
está la carpeta contenedora. Si el montaje es correcto, los archivos se enumerarán en el directorc:\data
en el contenedor.fuente
Debe cambiar todas las barras inclinadas hacia atrás por barras inclinadas hacia adelante, así que cambie
docker -v C: \ mi \ carpeta: / ubicación de montaje ...
a
docker -v C: / mi / carpeta: / ubicación de montaje ...
Normalmente llamo a Docker desde un script cmd donde quiero que la carpeta se monte para que sea relativa al script al que estoy llamando, así que en ese script hago esto ...
fuente
Símbolo del sistema (
Cmd.exe
)Cuando se usa la CLI de Docker desde Windows
Cmd.exe
, use%cd%
para montar el directorio actual:Git Bash (MinGW)
Cuando se usa la CLI de Docker desde Git Bash (MinGW), el montaje del directorio actual puede fallar debido a una conversión de ruta POSIX: el volumen montado en Docker agrega; C al final de la ruta de Windows cuando se traduce desde la ruta de estilo Linux .
Escape de las rutas POSIX prefijando con
/
Para omitir la conversión de ruta, las rutas POSIX deben tener el prefijo de barra (
/
) para tener una barra doble al principio (//
), incluyendo/$(pwd)
Deshabilitar la conversión de ruta
Deshabilite la conversión de ruta POSIX en Git Bash (MinGW) configurando
MSYS_NO_PATHCONV=1
la variable de entorno en el nivel de comandoo nivel de caparazón (sistema)
fuente
Git bash
echo ${PWD}
resultado:cmd o PowerShell
echo ${PWD}
resultado:como vemos en cmd o PowerShell $ {PWD} no funcionará
fuente