如何识别docker容器中是否有任何应用程序以root身份运行

时间:2019-02-13 16:30:18

标签: docker doc

我们使用了很多在docker容器中运行的第三方图像[例如:gitlab,jenkins,centos7 ..]。我想知道如何检查容器中运行的任何应用程序是否以root用户身份运行。与检查普通服务器ps -elf | grep root相同,但位于容器内部。

3 个答案:

答案 0 :(得分:1)

您可以将终端连接到正在运行的容器,一旦进入容器,就可以运行 ps 命令:

附加到容器

$ docker exec -it <container_id> /bin/bash

您可以在官方文档站点https://docs.docker.com/engine/reference/commandline/exec/

中了解有关 docker exec 的更多信息。

希望有帮助!

答案 1 :(得分:0)

您可以将 docker top 命令与进程ID关联使用... 结合使用“ docker ps”和“ docker top”就可以了。

您可以这样做stg:

docker ps | perl -ne '@cols = split /\s{2,}/, $_; printf "%15s\n", $cols[0]' > tmp.txt &&  tail -n $(($(wc -l < tmp.txt)-1)) tmp.txt | xargs -L1 docker top | perl -ne '@cols = split /\s{2,}/, $_; printf "%15s %65s\n", $cols[0], $cols[7]' && rm tmp.txt

这不是一个完美的答案((请留意),还要注意,它仅适用于运行容器。运行容器之前,从图像的角度进行检查比较安全。 然后,每次获取图像时,只需检查这种方式:

d image inspect <image id> | grep -i user

我可能是错的,但是我认为没有用户表示root。否则,您将不得不在那里分析输出。

答案 2 :(得分:0)

运行容器

要获取主机上正在运行的容器中的所有进程及其 UID,您可以执行以下操作:

for c in $(docker ps -q); do docker inspect $c -f "{{ .Name }}:"; docker top $c | awk '{print $1, $2, $8}'; echo "--------------"; done

这将打印类似

/webserver-dockerized_nginx_1:
UID PID CMD
root 13437 nginx:
systemd+ 13522 nginx:
systemd+ 13526 nginx:
systemd+ 13527 nginx:
systemd+ 13528 nginx:
--------------

对于您运行的所有容器。

图片

要获取主机上所有图像的配置用户,您可以执行

docker image inspect $(docker image ls -q) -f "{{ .RepoTags }}: {{ .ContainerConfig.User }} {{ .Config.User }}"

这将输出类似

[nginx:mainline-alpine]:
[memcached:alpine]: memcache memcache
[redis:5-alpine]:

Marvin 提到:如果输出中没有用户,则 Dockerfile 中没有定义 USER,因此容器将以 root 身份运行(参考:Docker Documentation