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