例如,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
即可得到该容器的其余关键信息。