如何使用Powershell(或CMD)在Docker中安装Windows文件夹?

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

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

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

我试图用“”replace“$(pwd)”。 甚至“/”没有运气。 我也试过($ pwd | Resolve-Path -Relative)。 在所有情况下,我得到

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

什么工作是取代“$(pwd)”/ d /path/到/我/文件夹

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

(这是d:\path\到\我的\文件夹)和安装正确完成。 但是,我想使命令通用,以便可以从主机上的任何文件夹运行。

如文档所述 /<drive>/<path>是安装文件夹的正确语法:

在Windows上,使用以下命令装载目录

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

通过转换Docker所期望的path,可以使命令更为通用:

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

喜欢这个:

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

如果驱动器号必须小写(不能testing,因为我没有在Windows上运行Docker),它会变得更复杂一点。 如果可以小写整个string,则可以用$PWD.Path.ToLower()replace$PWD.Path 。 如果您必须小写只是驱动器号,并在path的其余部分保留大小写,则可以使用callback函数:

 $re = [regex]'^([AZ]):' $cb = { $args[0].Groups[1].Value.ToLower() } docker run -v "$($re.Replace($PWD.Path, $cb) -replace '^|\\+','/')":/data -- ... 

这在PowerShell中工作:

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

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