如何使用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中将当前目录挂载为卷