2017-02-14 63 views
2

我可能會問一個初學者級別的問題,但我需要一種方法來區分docker和non-docker下的進程。 'ps'命令的命令輸出給了我一個感覺,即進程在linux系統中運行,並且無法確認docker是否處於運行狀態。如何知道進程正在docker下運行

在相同的上下文中,docker根文件系統啓動docker進程時可能/可行。

是相同的可行或有任何其他解決方案相同?

+0

[如何檢查一個進程是否在Docker容器中運行]的可能重複(http://stackoverflow.com/questions/23513045/how-to-check-if-a-process-is-running-inside- docker-container) –

回答

3

您可以通過Docker主機上的進程樹識別Docker進程。

父進程到2924(HAProxy的)是2902
父進程到2902(HAProxy的開始)是2881
2881將是docker-container這是由一個dockerd過程

管理要查看進程列表中以樹的形式使用ps -ejHpstree(可在包Psmisc做)

要獲得快速列表什麼dockerd

下運行

顯示PID的父母(-s

/ # pstree -aps 3744 
init,1  
    `-dockerd,1721 --pidfile=/run/docker.pid -H unix:///var/run/docker.sock --swarm-default-advertise-addr=eth0 
     `-docker-containe,1728 -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --shim docker-containerd-shim ... 
      `-docker-containe,3711 8d923b3235eb963b735fda847b745d5629904ccef1245d4592cc986b3b9b384a... 
       `-java,3744 -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -cp/zookeeper/bin/../build/cl 
        |-{java},4174 
        |-{java},4175 
        |-{java},4176 
        |-{java},4177 
        |-{java},4190 
        |-{java},4208 
        |-{java},4209 
        |-{java},4327 
        |-{java},4328 
        |-{java},4329 
        |-{java},4330 
        |-{java},4390 
        |-{java},4416 
        |-{java},4617 
        |-{java},4625 
        |-{java},4629 
        `-{java},4632 

顯示泊塢窗的所有兒童,包括命名空間變化(-S):

/ # pstree -apS $(pgrep dockerd) 
dockerd,1721 --pidfile=/run/docker.pid -H unix:///var/run/docker.sock --swarm-default-advertise-addr=eth0 
    |-docker-containe,1728 -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --shim docker-containerd-shim ... 
    | |-docker-containe,3711 8d923b3235eb963b735fda847b745d5629904ccef1245d4592cc986b3b9b384a... 
    | | |-java,3744,ipc,mnt,net,pid,uts -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -cp/zookeeper/bin/../build/cl 
    | | | |-{java},4174 
    | | | |-{java},4175 
    | | | |-{java},4629 
    | | | `-{java},4632 
    | | |-{docker-containe},3712 
    | | `-{docker-containe},4152 
    | |-docker-containe,3806 49125f8274242a5ae244ffbca121f354c620355186875617d43876bcde619732... 
    | | |-sinopia,3841,ipc,mnt,net,pid,uts               
    | | | |-{V8 WorkerThread},4063 
    | | | |-{V8 WorkerThread},4064 
    | | | |-{V8 WorkerThread},4065 
    | | | |-{V8 WorkerThread},4066 
    | | | |-{node},4062 
    | | | |-{sinopia},4333 
    | | | |-{sinopia},4334 
    | | | |-{sinopia},4335 
    | | | `-{sinopia},4336 
    | | |-{docker-containe},3814 
    | | `-{docker-containe},4038 
    | |-docker-containe,3846 2a756d94c52d934ba729927b0354014f11da6319eff4d35880a30e72e033c05d... 
    | | |-node,3910,ipc,mnt,net,pid,uts lib/dnsd.js 
    | | | |-{V8 WorkerThread},4204 
    | | | |-{V8 WorkerThread},4205 
    | | | |-{V8 WorkerThread},4206 
    | | | |-{V8 WorkerThread},4207 
    | | | `-{node},4203 
1

命令lxc-ls和命令lxc-ps可以安裝在您的Linux發行版上。這將允許您列出正在運行的LXC容器以及分別在這些容器中運行的進程。您應該能夠使用流將lxc-ls的輸出鏈接到lxc-ps,並獲得所有容器化過程的列表。

需要注意的是,您指定了Docker並且並非每個Docker實例都在LXC上運行,也不一定是本地主機進程。 Docker定義了一個可以被調用來列出遠程Docker實例的API,所以這種技術也不會幫助枚舉遠程計算機上的進程。

+0

現在很少有Docker實例會運行LXC。 – Matt

0

在窗口泊塢窗的行爲有點不同。 它的進程不是作爲父進程的子進程運行,而是作爲主機上的獨立進程運行。

它們可以通過(例如),的powershell觀看,像

Get-Process powershell 

例如,在運行Microsoft/IIS容器時將包括附加的powershell處理(在主機上得到處理,因爲MS/IIS容器運行作爲主要可執行進程的PowerShell)。

相關問題