首页 文章

在Windows 10上将当前目录挂载为Docker中的卷

提问于
浏览
42

Description

我通过Hyper-V在Windows 10上使用Docker版本1.12.5,并希望将容器可执行文件用作当前路径中的命令 . 我构建了一个运行良好的Docker镜像,但是我在安装当前路径时遇到了问题 . 我们的想法是创建一个别名并执行一个 docker run --rm [...] 命令,以便它可以在当前目录中的系统范围内使用 .

Setup

我有一个带有文件夹"test"的驱动器E,并且在那里有一个名为"folder on windows host"的文件夹,以显示该命令正在运行 . Dockerfile创建目录 /data ,将其定义为VOLUME和WORKDIR .

E:\test 作为PowerShell中的当前目录并使用绝对路径执行Docker命令,我可以看到 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

Problem

我想使用当前目录而不是绝对符号 . 由于不同的错误消息,我无法在卷中使用pwd:

尝试($ 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'.

尝试使用/($ 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'.

尝试使用'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'.

尝试使用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'.

在Windows 10上将当前目录安装为Docker中的卷的正确语法是什么?

4 回答

  • 0

    在Windows命令行( cmd )中,您可以安装当前目录,如下所示:

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

    在PowerShell中,您使用 ${PWD} ,它为您提供当前目录:

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

    Cross Platform

    以下两个选项适用于PowerShell和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

  • 91

    这在PowerShell中适用于我:

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

    这个命令应该修复它 .

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

    是主机当前文件夹 . : 之后是容器文件夹 . 如果安装正确,则文件将列在容器中的控制器 c:\data 中 .

  • 15

    您需要将所有反斜杠替换为正斜杠以进行更改

    docker -v C:\ my \ folder:/ mountlocation ...

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

    我通常从一个cmd脚本调用docker,我希望文件夹挂载相对于我正在调用的脚本,所以在那个脚本中我这样做...

    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
    

相关问题