2015-03-19 81 views
0

摘要:共享卷組在Docker容器內發生更改,具體取決於主機的哪個用戶正在運行該容器。Docker:共享卷組根據主機用戶而變化

在我的主機,我有兩個用戶:userHost1和userHost2

登錄身份userHost1我得到Debian的形象和我建立具有以下Dockerfile泊塢窗圖像:

FROM debian 

RUN adduser --disabled-password --gecos '' user 

之後,當我用userHost1運行docker並加載共享卷時,我可以在其上寫入。但是,如果我用userHost2加載它,我無法寫入。

運行搬運工爲userHost1:

[email protected]:~$ docker run -t -i -u user -v /home/userHost1/try/:/try/ my_debian 
[email protected]:/$ ls -ahl 
... 
drwxrwxr-x 2 user user 4.0K Mar 19 03:41 try 
... 

但是,如果我登錄到主機userHost2:

[email protected]:~$ docker run -t -i -u user -v /home/userHost2/try/:/try/ my_debian 
[email protected]:/$ ls -ahl 
... 
drwxrwxr-x 2 1002 1002 4.0K Mar 19 03:45 try 
... 

[email protected]:/$ touch try/hello 
touch: cannot touch `hello': Permission denied 

這究竟是爲什麼?我認爲主機中的用戶與碼頭集裝箱無關。是否因爲我將用戶主機1拉到Debian鏡像?

當然,userHost1是/ home/userHost1/try /的所有者,userHost2是/ home/userHost2/try /的所有者。

回答

1

這只是一個簡單的權限問題。請記住容器和主機上的uid相同,但用戶名可能不同(因此uid 1002在主機和容器上可能有不同的名稱)。

/home/userHost1/try/的擁有者與容器中的用戶user具有相同的uid。 /home/userHost2/try/的所有者是uid 1002,這是而不是user中的容器相同,因此user不能寫入目錄。

+0

太好了,非常感謝你的解釋。 有沒有處理這個問題的策略/最佳實踐? – user1294122 2015-03-20 04:38:02

+1

那麼,最簡​​單的解決方案是確保你到處都使用相同的uid,即userHost2需要將uid設置爲userHost1,可以使用useradd/adduser進行設置。否則,您可以提供選定的gid訪問權限並將所有用戶添加到該組。 – 2015-03-20 10:22:08