天天看點

如何從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

即可得到該容器的其餘關鍵資訊。

繼續閱讀