2016-08-24 106 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中的驅動器號被大寫相關?否則,你的解決方案應該是正確的 –

相關問題