2017-07-31 43 views
-1

我已經設置Docker作爲non-root user運行。現在我可以像普通用戶一樣啓動我的容器,我感覺更舒適。裝載捲上的Docker訪問權限。爲什麼他們屬於根?

[email protected]:~$ docker run -it -v ~/test:/test alpine:3.6 sh 
/# touch /test/test1 
同時在主機上

[email protected]:~$ ls -l ~/test/ 
total 0 
-rw-r--r-- 1 root root 0 Jul 31 15:50 test1 

爲什麼文件屬於root?我怎樣才能讓他們和容器中的所有創建的文件都屬於me

有趣的事實:這發生在Debian Linux上。相反,在Mac上做同樣的事情,創建的文件將屬於me

回答

1

Mac OS Docker和Linux Docker在行爲上有很多變化。所以忽略這個部分。專注於Linux的一面。

你用https://docs.docker.com/engine/installation/linux/linux-postinstall/#manage-docker-as-a-non-root-user所做的基本上只是意味着非root用戶有權訪問docker組。通過該docker組,您可以執行docker命令。但是docker守護進程仍以root用戶身份運行。

,你可以通過運行

ps aux | grep dockerd 

確認,當你做一個卷映射,該目錄得到由搬運工,最終有根用戶權限創建。您正在尋找的產品最近已推出爲Docker user namespaces。請閱讀下面的網址

https://success.docker.com/KBase/Introduction_to_User_Namespaces_in_Docker_Engine

細節這將指導你如何與映射的用戶,而不是root身份運行的泊塢窗容器。總之創建/更新/etc/docker/daemon.json文件有以下內容

/etc/docker/daemon.json

{ 
"userns-remap": "<a non root user>" 
} 

,並重新啓動泊塢窗服務。現在你的Docker容器會認爲他們有root權限,但是他們可以作爲主機上的非root用戶運行。

+0

謝謝,非常好的解釋,這真的幫助我理解!使用用戶命名空間有沒有潛在的負面影響(安全性,性能)?在服務器端,我只是每次想訪問或修改主機端安裝卷中的某些文件時都必須「sudo」而煩惱。 – qqilihq

+1

用戶名稱空間映射之前存在含義。因爲從容器中逃出的東西會直接獲得根訪問權限。但是對於用戶命名空間,即使容器以某種方式到達主機操作系統,它也不具有root權限。所以使用它更安全。關於sudo,如果您使用當前用戶作爲用戶重映射,那麼它不需要sudo就可以工作? –

+0

Re'sudo':的確,這是我的問題背後的原意:)感謝您的信息! – qqilihq

相關問題