docker通过内部进程的pid查找容器

我有docker集装箱。 在他们里面启动了一个进程 在主机上 ,命令top输出在容器内启动的所有进程的pid。

我怎样才能find一个容器,在这个容器中运行这个PID的进程?

谢谢。

谢谢@亚历克斯和@斯坦尼斯拉夫的帮助。 但是我没有得到完整的答案。 我结合他们。
总之,我已经得到了下一个。

第一

 pstree -sg <PID> 

其中PID是来自命令top的进程的PID

在输出中,我正在获取systemd父进程的父PID。 这个PID是docker集装箱的PID。

我执行后

 docker ps -q | xargs docker inspect --format '{{.State.Pid}}, {{.Name}}' | grep "^%PID%" 

其中%PID%是这个父PID。

结果我有docker的容器ID

这就是我想要的

我想你需要这样的东西:

  docker ps -q | xargs docker inspect --format '{{.State.Pid}}, {{.Name}}' | grep "%PID%" 

你可以find这个过程的所有家长:

 pstree -sg <PID> 

这个链将包含容器

您应该能够使用exec来检查每个正在运行的容器是否存在pid。 当然,同一个进程ID可以存在于多个容器中。 这是一个小的bash脚本,它根据每个容器中提供的pid来search正在运行的进程:

 #!/bin/bash for container in $(docker ps -q); do status=`docker exec $container ls /proc/$1 2>/dev/null` if [ ! -z "$status" ]; then name=`docker ps --filter ID=$container --format "{{.Names}}"` echo "PID: $1 found in $container ($name)" break; fi done; 

例如:

 ./find-process.sh 1