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

新手上路,请多包涵

描述

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

设置

我有一个带有文件夹“test”的驱动器 E,其中有一个名为“Windows 主机上的文件夹”的文件夹,以显示该命令正在运行。 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

问题

我想使用当前目录而不是绝对符号。由于不同的错误消息,我无法在卷中使用 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 中将当前目录挂载为卷的正确语法是什么?

原文由 McGo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

在 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

在 Linux 上:

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

跨平台

以下选项适用于 PowerShell 和 Linux(至少 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

原文由 ETL 发布,翻译遵循 CC BY-SA 4.0 许可协议

这在 PowerShell 中对我有用:

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

原文由 friism 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题