我正在运行一个带有共享PID命名空间的docker容器,容器运行一个webapp,在主机上显示正在运行的进程以允许监视。我正在使用python的psutil
库来获取进程详细信息。
问题是,对于用户名,webapp在从容器运行时返回UID而不是用户名。如果我直接从主机运行它,它会返回正确的用户名。
有人可以建议直接或通过UID获取用户名的最佳方式是什么?我需要为所有用户名执行此操作,而不仅仅是我自己的用户名,并且计算机上的用户数量是任意的。
答案 0 :(得分:0)
我会将其设置为环境变量并以此方式引用它。
EG:
if (!function_exists('SendSMS')) {
function SendSMS (...) {
}
}
另一种方法是使用类似的方法强制容器名称:
docker run -it -e MY_USERNAME=$(whoami) alpine sh
/ # echo $MY_USERNAME
nick
/ #
然而,这要求用户出现在图像中; UID将不与主机或跨系统保持一致。
$ 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
如果您正在寻找此功能,则应将su-exec与强大的配置管理结合使用。
答案 1 :(得分:0)
从容器中的主机挂载/ etc / passwd文件,如下所示:
-v /etc/passwd:/etc/passwd:ro
编辑:你甚至可能需要挂载/ etc / group ......
更新:对于以用户身份进行监禁(使用-u $(whoami)
),您需要创建另一个复制实际/ etc / passwd和/ etc / group的图像。