如何掛載網路磁碟機至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
可以看到 Windows Container 順利被建立並且 T:\Temp 也順利被掛載至 c:\temp 之下了。
不過目前 SMB Global Mapping 還有那麼小小的缺點,就是還未提供類似 New-PSDrive -Persist
參數,白話點說,就是如果主機重開機,所有 SMB Global Mapping 的設定都需要重新設定一次。
沒有留言:
張貼留言
感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。