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

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

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

rippletek 2016-06-14 14:08:27 浏览1279 评论0

摘要: 例如,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:.

例如,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/

【云栖快讯】一站式开发者服务,海量学习资源免费学  详情请点击

网友评论