如何掛載網路磁碟機至Windows Container Volume

如何掛載網路磁碟機至Windows Container Volume?

在 Server Core 1709/1803 - Windows Container,如果要掛載 Docker Host 的資料夾為 Volume,那麼最快速的方式是指定一個絕對路徑給 Windows Container。

例如:

docker run -v c:\ContainerData:c:\data:RO microsoft/windowsservercore:1709 cmd.exe
docker run -v c:\ContainerData:c:\data:RW microsoft/windowsservercore:1709 cmd.exe
docker run -v c:\ContainerData:c:\data microsoft/windowsservercore:1709 cmd.exe
  • :RO 為 Read Only,:RW 為 Read Write,未指定預設為 :RW

那麼如果想要掛載掛載網路磁碟機至 Windows Container 裡呢?

你或許會試試 -v \\HostNameOrIP\ShareFolder:C:\data 來直接掛載的方式。不用試,這行不通。

如果讀者是有點網路底子的,那麼一定會想,我把網路磁碟機先掛載為本機磁碟,如前面第一個範例,再透過 Volume 機制掛載進去 Windows Container。等於是二層掛載的行為:Network Disk → Host Disk → Docker Volume

在 PowerShell 你應該會查詢到 PSDrive 相關指令(1)(2)的說明:

New-PSDrive -Name "T" -PSProvider FileSystem -Root "\\DomainOrIP\\ShareFolder" -Persist

但當我們執行 -v 來掛載時卻會得到一個錯誤:

docker run -it --rm -v T:\Temp\:c:\temp microsoft/windowsservercore:1803 cmd.exe

其實這個需求,在 Server Core 1709 之前是無解的。

在 Server Core 1709 (含 1803) 可以使用新的 SMB Global Mapping 來解決:

$creds = Get-Credential
New-SmbGlobalMapping -RemotePath \\DomainOrIP\\ShareFolder -Credential $creds -LocalPath T:

掛載之後,使用 Get-PSDrive 的查看會覺得與 Net-PSDrive 無任何差異,在執行一次 -v 來掛載測試:

docker run -it --rm -v T:\Temp\:c:temp microsoft/windowsservercore:1803 cmd.exe
SMB Global Mapping Disk

可以看到 Windows Container 順利被建立並且 T:\Temp 也順利被掛載至 c:\temp 之下了。

不過目前 SMB Global Mapping 還有那麼小小的缺點,就是還未提供類似 New-PSDrive -Persist 參數,白話點說,就是如果主機重開機,所有 SMB Global Mapping 的設定都需要重新設定一次。

參考資料:

沒有留言:

張貼留言

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。