remove prune images force compose all windows docker

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



docker volume prune (7)

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 Docker que funciona bien, pero tengo un problema para montar la ruta actual. La idea es crear un alias y docker run --rm [...] 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 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:

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

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

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: 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 de montar el directorio actual como un volumen en Docker en Windows 10?


  1. Abra la Configuración en Docker Desktop (Docker para Windows).
  2. Seleccione Unidades compartidas .
  3. Seleccione la unidad que desea usar dentro de sus contenedores (por ejemplo, C).
  4. Haz clic en Aplicar . Es posible que se le solicite que proporcione credenciales de usuario.

  5. El siguiente comando ahora debería funcionar en PowerShell (el símbolo del sistema no admite ${PWD} ):

    docker run --rm -v ${PWD}:/data alpine ls /data


Aquí está el mío, que es compatible con Win10 docker-ce y Win7 docker-toolbox. En este 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: /

$WIN_PATH=Convert-Path . #Convert for docker mount to be OK on Windows10 and Windows 7 Powershell #Exact conversion is : remove the ":" symbol, replace all "/" by "/", remove last "/" and minor case only the disk letter #Then for Windows10, add a /host_mnt/" at the begin of string => this way : c:/Users is translated to /host_mnt/c/Users #For Windows7, add "//" => c:/Users is translated to //c/Users $MOUNT_PATH=(($WIN_PATH -replace "//","/") -replace ":","").Trim("/") [regex]$regex=''^[a-zA-Z]/'' $MOUNT_PATH=$regex.Replace($MOUNT_PATH, {$args[0].Value.ToLower()}) #Win 10 if ([Environment]::OSVersion.Version -ge (new-object ''Version'' 10,0)) { $MOUNT_PATH="/host_mnt/$MOUNT_PATH" } elseif ([Environment]::OSVersion.Version -ge (new-object ''Version'' 6,1)) { $MOUNT_PATH="//$MOUNT_PATH" } docker run -it -v "${MOUNT_PATH}:/tmp/test" busybox ls /tmp/test


Debes cambiar todas las barras diagonales hacia atrás para cambiarlas

docker -v C: / my / carpeta: / mountlocation ...

a

docker -v C: / mi / carpeta: / mountlocation ...

Normalmente llamo a Docker desde un script cmd donde quiero que la carpeta se monte en relación con el script que estoy llamando, así que en ese script hago esto ...

SETLOCAL REM capture the path to this file so we can call on relative scrips REM without having to be in this dir to do it. REM capture the path to $0 ie this script set mypath=%~dp0 REM strip last char set PREFIXPATH=%mypath:~0,-1% echo "PREFIXPATH=%PREFIXPATH%" mkdir -p %PREFIXPATH%/my/folder/to/mount REM swap / for / in the path REM because docker likes it that way in volume mounting set PPATH=%PREFIXPATH:/=/% echo "PPATH=%PPATH%" REM pass all args to this script to the docker command line with %* docker run --name mycontainername --rm -v %PPATH%/my/folder/to/mount:/some/mountpoint myimage %* ENDLOCAL


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, usa ${PWD} , que le proporciona 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


Este comando debería arreglarlo.

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

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


Esto funciona para mí en PowerShell:

docker run --rm -v ${PWD}:/data alpine ls /data


Para Git Bash para Windows (en ConEmu), lo siguiente funciona para mí (para los contenedores Docker Windows):

docker run --rm -it -v `pwd -W`:c:/api microsoft/dotnet:2-runtime

Tenga en cuenta los backticks / backquotes alrededor de pwd -W !

Con todas las otras variaciones de PWD que probé, recibí: "Error response from daemon: invalid volume specification: ..."

Actualización: Lo anterior fue para los contenedores Docker de Windows, para el uso de contenedores Linux:

docker run --rm -it -v `pwd -W`:/api -p 8080:80 microsoft/aspnetcore:2