釐清多 Windows Container 針對同一 Volume 運作時的權限身份

釐清多 Windows Container 針對同一 Volume 運作時的權限身份

專案有個需求,會同時有多個 Windows Container 對 Docker Host 同一資料夾進行操作,讀取、新增、刪除、修改都有,而且操作的量不小(秒級)。問題出在,A Container 建立資料夾與檔案,B Container 要操作時會出現 Access Denied。找了好久原因,終於釐清整個 Windows Container 在 Volume 運作時的身份與權限。

簡化的情境如下:

Docker Host --> A Container / B Container

在Server Core安裝Visual Studio Code

在Server Core安裝Visual Studio Code

雖然在 Server Core 以 PowerShell 為主,但還是有修改檔案內容的需求。當然,我實力超強,我可以用 PowerShell 來完成一切!(聽聽就好 XD)不然我也能使用 notepad.exe 來完成工作,不過當個現代化開發者,不使用個現代化編輯器的話,不就掉漆了。讓我呼叫你,超前鬼 Visual Studio Code。

Server Core 只是沒有 GUI 管理介面,但不代表不能安裝與使用 GUI 的應用程式。

在Server Core進行Python 3安裝

在Server Core進行Python 3安裝

同事想在 Server Core 上安裝 Python 3,但看到 Server Core 純 command-line 畫面嚇到,不知如何安裝軟體。其實我也不會,但我有變通的方式。哈哈。

如何掛載網路磁碟機至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 來直接掛載的方式。不用試,這行不通。