我正在使用 Kubernetes,並且想以非 root 使用者身分執行容器。
如果我正在編寫自己的 Dockerfile,我可以useradd
, chmod 777
, 並使用 docker 運行--user <username>
。
但在某些情況下,需要編輯的文件清單chmod
可能很長且未知,成為一個乏味的過程,並且它可能會隨著時間的推移而變化,並導致僅在運行時發現的錯誤。
有最佳實務嗎?您將如何處理諸如/var/log
和 之類的資料夾/var/run
?一種選擇是 touch/mkdir 並使用setfacl
.
最簡單的就是chmod 777 -R /var/log
.
但這是否也能讓容器777
存取主機?當容器具有一組權限而主機具有另一組權限時,它是如何映射的?
答案1
使用chmod 777
基本上從來都不是正確的解決方案。了解如何正確設定您的權限。權限幾乎總是應該是最不可能實現您的目標的。
如何做到這一點在很大程度上取決於特定圖像的上下文以及您正在運行的軟體。
但這是否也會為容器 777 提供主機上的存取權限?
取決於您要變更權限的路徑是否是或將是綁定綁定安裝。
答案2
我發現這與我自己的問題有關:
覆蓋檔案系統掛載下層目錄,然後將上層目錄附加到合併的掛載點。當進程將新檔案寫入合併目錄時,新檔案將寫入上級目錄。當進程修改下級目錄中的現有檔案時,核心會將下級目錄中的檔案複製到上級目錄中,並允許進程修改上級目錄中的檔案。
因此,chown
覆蓋(上層)目錄應該對主機(下層)目錄沒有影響。
但我想chmod 777
可以允許其他使用者存取主機上的覆蓋檔案系統。