【问题标题】:How to mount a Windows' folder in Docker using Powershell (or CMD)?如何使用 Powershell(或 CMD)在 Docker 中挂载 Windows 文件夹?
【发布时间】:2016-08-24 21:11:44
【问题描述】:

我想在 Windows 10 上运行一个容器并将我的本地文件夹挂载到容器中的一个文件夹中。我们以下面的命令为例,但任何容器都可以。

 docker run -v "$(pwd)":/data -- name mongo -d mongo mongod --smallfiles

问题在于 pwd 命令。在 Unix 环境中它返回一个相对路径,但在 Windows 中它返回一个绝对路径。

我尝试将“$(pwd)”替换为“.”甚至没有运气的“./”。我也试过($pwd | Resolve-Path -Relative)。在所有情况下我都会得到

Error parsing reference: ":/data" is not a valid repository/tag.

有效的方法是将“$(pwd)”替换为/d/path/to/my/folder

docker run -v /d/path/to/my/folder:/data -- name mongo -d mongo mongod --smallfiles

(即 d:\path\to\my\folder)并且安装已正确完成。但是,我想让命令通用,以便可以从主机上的任何文件夹运行。

【问题讨论】:

  • 显然"$(pwd)" 不是作为命令运行的,而是似乎被解释为pwd 变量的值(猜想我很久以前就离开了Windows 世界)。鉴于该值为 void,您将收到错误 ":/data" is not a valid repository/tag. - 请注意冒号前没有目录名...切换到 linux 或 OSX...

标签: powershell docker


【解决方案1】:

这适用于 PowerShell:

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

Mount current directory as a volume in Docker on Windows 10

【讨论】:

  • 它的简单性使它成为对我最有用的答案
  • 我认为这个答案应该标记为正确答案。
【解决方案2】:

因为documented /<drive>/<path> 是挂载文件夹的正确语法:

在 Windows 上,使用以下方式挂载目录:

docker run -v /c/Users/<path>:/<container path> ...

您可以通过将路径转换为 ​​Docker 期望的方式来使您的命令更通用:

$PWD.Path -replace '^|\\+','/' -replace ':'

像这样:

docker run -v "$($PWD.Path -replace '^|\\+','/' -replace ':')":/data -- ...

如果驱动器号必须小写(无法测试,因为我没有在 Windows 上运行 Docker),它会变得有点复杂。如果您可以将整个字符串小写,则可以将$PWD.Path 替换为$PWD.Path.ToLower()。如果您必须只小写驱动器号并在路径的其余部分保留大小写,则可以使用回调函数:

$re = [regex]'^([A-Z]):'
$cb = { $args[0].Groups[1].Value.ToLower() }

docker run -v "$($re.Replace($PWD.Path, $cb) -replace '^|\\+','/')":/data -- ...

【讨论】:

  • 不幸的是没有运气。我想知道它是否与 Windows 中大写的驱动器号有关?否则,您的解决方案应该是正确的
猜你喜欢
  • 1970-01-01
  • 2016-05-31
  • 1970-01-01
  • 1970-01-01
  • 2021-03-28
  • 2016-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多