2016-08-24 63 views
2

我想在Windows 10上运行容器,并将我的本地文件夹安装到容器中的文件夹中。让我们以下面的命令为例,但任何容器都可以。如何使用Powershell(或CMD)在Docker中安装Windows文件夹?

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. 

什么工作与/ d /路径替换 “$(PWD)”/到/我的/文件夹

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

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

+0

显然''$(pwd)“'不是作为一个命令运行,而是它似乎被解释为'pwd'变量的值(猜测是因为我很久以前离开了Windows世界)。鉴于该值是无效的,你会得到错误'“:/ data”不是一个有效的repository/tag.' - 注意冒号前没有目录名称...切换到linux或OSX ... –

+1

复制解决方案:http://stackoverflow.com/questions/41485217/mount-current-directory-as-volume-in-docker-on-windows-10 – ETL

回答

1

由于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上运行),它变得有点复杂。如果你可以小写整个字符串,你可以用$PWD.Path.ToLower()代替$PWD.Path。如果必须小写只是驱动器号和路径的其他部分保留的情况下,你可以使用一个回调函数:

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

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

不幸的是没有运气。我想知道它是否与Windows中的驱动器号被大写相关?否则,你的解决方案应该是正确的 –

相关问题