基于操作系统进程ID,查看该进程是属于哪个docker容器的

satuo20 1年前 ⋅ 253 阅读

有这么一个场景,在某个运行docker容器的主机上,查看到某个java进程占用的系统资源比较高,比如内存比较高,我们知道了这个进程是容器的进程,那么,我们怎么能够知道,这个进程是属于哪个容器的呢?

下面的命令,就会向你说明,如何在主机上,通过一个操作系统的进程,来获取该进程所在的容器名称······

首先,我们在主机上查看某个进程对应的PID(或者top命令也可以)

[root@nccztsjb-node-09 ~]# ps -ef |grep java | grep "/usr/local/java/bin/jav"
root      5220  5212  3 16:28 ?        00:00:04 /usr/local/java/bin/java -jar tools.jar ymscopy
root      6741 23869  0 16:30 pts/1    00:00:00 grep --color=auto /usr/local/java/bin/jav
root      9552  8476  3 Jun23 ?        03:38:10 /usr/local/java/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -server -Xms512m -Xmx1792m -Xss8m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=768m -Duser.timezone=GMT+08 -Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8 -Djava.awt.headless=true -XX:+DisableExplicitGC -Djava.security.egd=file:/dev/./urandom -Duser.timezone=GMT+08 -Ddefault.client.encoding=UTF-8 -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF8 -Duser.language=Zh -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
root     16063 16020  4 Jun23 ?        04:21:29 /usr/local/java/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -server -Xms512m -Xmx1792m -Xss8m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=768m -Duser.timezone=GMT+08 -Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8 -Djava.awt.headless=true -XX:+DisableExplicitGC -Djava.security.egd=file:/dev/./urandom -Duser.timezone=GMT+08 -Ddefault.client.encoding=UTF-8 -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF8 -Duser.language=Zh -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start

左边的第2列,就是获取到进程ID,我们以16063为例子 通过下面的命令,来获取该进程所在的容器的名称

pid=16063   # 这里替换为要查询的进程的PID

for i in $(docker container ls --format "{{.ID}}"); 
do 
    id_count=$(docker top $i | grep ${pid} | wc -l)
     
    if [[ ${id_count} -gt 0 ]]
      then
        echo -n "$i    "
        docker inspect -f '{{.Name}}' $i | tr -d "/"
    fi
done

全部评论: 0

    我有话说: