簡體   English   中英

Docker:通過共享PID名稱空間從UID獲取主機用戶名

[英]Docker: Get host username from UID via shared PID namespace

我正在運行具有共享PID名稱空間的docker容器,並且該容器運行一個webapp,該webapp在主機上顯示正在運行的進程以進行監視。 我正在使用python的psutil庫來獲取進程詳細信息。

問題是,對於用戶名,從容器中運行時,webapp返回UID而不是用戶名。 如果我直接從主機運行它,它將返回正確的用戶名。

誰能建議直接或通過UID獲取用戶名的最佳方法是什么? 我需要對所有用戶名(不僅是我自己的用戶名)執行此操作,並且計算機上的用戶數是任意的。

我將其設置為環境變量並以這種方式引用它。

例如:

docker run -it -e MY_USERNAME=$(whoami) alpine sh
/ # echo $MY_USERNAME
nick
/ #

另一種方法是使用類似的方法強制使用容器名稱:

$ echo -en "FROM alpine\n\nRUN adduser -S nick\n\n" > Dockerfile; docker build . -t example-name; docker run -it -u $(whoami) example-name sh
Sending build context to Docker daemon 2.048 kB
Step 1/2 : FROM alpine
 ---> 88e169ea8f46
Step 2/2 : RUN adduser -S nick
 ---> Running in f0ff1d5a75be
 ---> 916e94b7de6a
Removing intermediate container f0ff1d5a75be
Successfully built 916e94b7de6a
$ whoami
nick

但是,這要求用戶出現在圖像中。 該UID 不會與主機或跨系統一致。

$ id
uid=1001(nick) gid=1001(nick) groups=1001(nick)
nick@primestorage01:~/Code/playground$ echo -en "FROM alpine\n\nRUN adduser -S nick\n\n" > Dockerfile; docker build . -t example-name; docker run -it -u     $(whoami) example-name sh
Sending build context to Docker daemon 2.048 kB
Step 1/2 : FROM alpine
 ---> 88e169ea8f46
Step 2/2 : RUN adduser -S nick
 ---> Using cache
 ---> 916e94b7de6a
Successfully built 916e94b7de6a
/ $ id
uid=100(nick) gid=65533(nogroup) groups=65533(nogroup)
/ $

如果這是您要查找的內容,則應將su-exec與強大的配置管理結合使用。

從主機在容器中掛載/ etc / passwd文件,如下所示:

-v /etc/passwd:/etc/passwd:ro

編輯:您甚至可能還需要掛載/ etc / group ...

更新:要以用戶身份進行監禁(使用-u $(whoami) ),則需要創建另一個映像來復制實際的/ etc / passwd和/ etc / group。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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