天天看点

如何从ecs的pid定位到运行该进程的docker

例如,top显示存在如下进程:

5400 nobody 20 0 73260 30620 2284 s 8.3 0.4 0:20.63 nginx

对于这样一个进程,我们如何快速定位到它是运行于哪一个docker中呢 (特别是当ecs上运行了超过10个

docker的时候)?

先通过

$ pstree -p | grep -n5 5400

找到它的最上层的父进程pid:

...

114- | |-my_init(5248)-+-nginx(5398)-+-nginx(5399)

115: | | | |-nginx(5400)

116- | | | |-nginx(5401)

得到父进程pid=5248, 然后遍历所有容器的init进程进行匹配:

$ docker ps | awk '{print $1}' | grep -v container | xargs docker inspect -f '{{.state.pid}} {{.config.hostname}}' | grep 5248

5248 bd939dc98684

利用上面输出的container id,

$ docker ps | grep bd939dc98684

即可得到该容器的其余关键信息。

继续阅读