[英]Problem with the User and Group inside a container
初步的
首先,初步。 當運行一個卷映射到宿主機某部分的docker容器時,docker容器內的用戶通常是root,所以對於容器產生的文件,宿主機是不能編輯、修改或刪除它們的。 為了解決這個問題,有些人(包括創建我正在使用的圖像的人)建議使用-u
情況
我有一個 Docker 鏡像(由不同的人在不同的機器上構建)
此 Docker 映像假定用戶將成為 ID 為 1000 的用戶
問題
當一個Host機器的唯一用戶(並且其用戶ID為1000)運行該圖像時,沒有問題。 但是,就我而言,我是該主機的第二個用戶,因此我的用戶 ID 是 1001。所以我有以下內容:
在主機中,我執行cat /etc/passwd
並獲得多個用戶,包括:
firstuser:x:1000:1000:firstluser,,,:/home/firstuser:/bin/bash
myself:x:1001:1001:My Name,,,:/home/myself:/bin/bash
然后 :
案例 1我運行容器
docker run -it --rm -u 1001:1001 -v /a/path:/another/path image /bin/bash
因為做id -u
和id -g
給了我 1001.(畢竟我是第二個用戶)
這樣做會導致
groups:cannot find name for group ID 1001
然后我的用戶變成"I have no name!"
當我做cat/etc/passwd
我得到
originaluser:x:1000:1000::/home/originaluser:bin/bash
<---- 這里沒有,,,
所以顯然我的用戶(1001)不存在,這會導致很多問題。
為了解決這個我試過
CASE2我用
docker run -it --rm -u 1000:1000 -v /a/path:/another/path image /bin/bash
這不會導致之前的錯誤,現在即使我myself
但是作為firstuser
運行 Docker 映像,在容器中我是originaluser
(因為兩者都是 1000)
做cat /etc/passwd
我可以看到
originaluser:x:1000:1000::/home/sensetime:bin/bash
正如預測的那樣,我的用戶是originaluser
。
我應該很高興,但是,這也會引起問題!
稍后,容器內的程序嘗試創建一個文件(用戶為 1000),但由於它已映射且用戶所有者為 1001,因此此創建失敗。
什么是防止所有這些問題並能夠將主機中的用戶與容器中的用戶同步的好方法?
我最近發現了可以解決大多數問題的fixuid 。
容器中的 uid/gid 不能(或預計不會)與您主機上的 uid/gid 匹配。
我上面鏈接的fixuid
setuid go binary 可以通過更改fixuid
用戶的 uid/gid 以匹配您配置的那個來解決這個問題。
例如:
主機:uid/gid/name=1001/1001/kansai
來賓用戶:uid/gid/name=1000/1000/user
如果您在容器中添加了fixuid
二進制文件(構建階段),那么您可以運行:
docker run --rm -it -u $(id -u):$(id -g) -v /a/path:/another/path image fixuid /bin/bash
您還可以在入口點中設置fixuid
,以便更易於使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.