簡體   English   中英

容器內用戶和組的問題

[英]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 -uid -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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM