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

  1. 云栖社区>
  2. 博客>
  3. 正文

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

rippletek 2016-06-14 14:08:27 浏览1501
展开阅读全文

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

参考资料: http://blog.maxcnunes.net/2014/10/19/finding-out-to-which-docker-container-a-process-belongs-to/

网友评论

登录后评论
0/500
评论
rippletek
+ 关注