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