在进程列表中识别 Docker 内部运行的进程

Nun*_*uno 4 centos top ps docker centos7

我意识到在 Docker 容器内运行的进程出现在主机的进程列表中:

# ps aux | grep mariadb
root     12486  0.0  0.0 112812   976 pts/0    S+   14:47   0:00 grep --color=auto mariadb
Run Code Online (Sandbox Code Playgroud)

有没有办法识别进程是在主机上运行还是在 Docker 容器上运行,或者有办法过滤掉 Docker 进程?

Nun*_*uno 7

找到了答案。

要过滤不在 Docker 进程中运行的进程,我们可以使用以下命令:

ps -e -o pid,comm,cgroup | grep -v "/docker/"

因此,举例来说,如果我想杀死所有不在 Docker 内运行的“php-fpm”进程,我可以这样做:

kill -9 $(ps -e -o pid,comm,cgroup | grep -v "/docker/" | awk '$2 == "php-fpm" {print $1}')