如何知道进程在docker下运行

时间:2017-02-14 05:07:46

标签: docker

我可能会问一个非常初学者级别的问题,但我需要一种方法来区分docker下的进程和框内非docker下的进程。 ' ps'命令命令输出让我觉得进程在linux框中运行,无法确认是否在docker的引擎盖下。

在相同的上下文中,使用docker根文件系统启动docker下的进程是可行/可行的。

同样可行还是有其他解决办法?

3 个答案:

答案 0 :(得分:6)

您可以通过Docker主机上的进程树识别Docker进程。

2924(haproxy)的父过程是2902
到2902(haproxy-start)的父过程是2881
2881将docker-containerdockerd进程管理

要以树格式查看您的流程列表,请使用ps -ejHpstree(可在psmisc包中找到)

快速了解在dockerd

下运行的最新动态
/ # pstree $(pgrep dockerd)
dockerd-+-docker-containe-+-docker-containe-+-java---17*[{java}]
        |                 |                 `-8*[{docker-containe}]
        |                 |-docker-containe-+-sinopia-+-4*[{V8 WorkerThread}]
        |                 |                 |         |-{node}
        |                 |                 |         `-4*[{sinopia}]
        |                 |                 `-8*[{docker-containe}]
        |                 |-docker-containe-+-node-+-4*[{V8 WorkerThread}]
        |                 |                 |      `-{node}
        |                 |                 `-8*[{docker-containe}]
        |                 |-docker-containe-+-tinydns
        |                 |                 `-8*[{docker-containe}]
        |                 |-docker-containe-+-dnscache
        |                 |                 `-8*[{docker-containe}]
        |                 |-docker-containe-+-apt-cacher-ng
        |                 |                 `-8*[{docker-containe}]
        |                 `-20*[{docker-containe}]
        |-2*[docker-proxy---6*[{docker-proxy}]]
        |-docker-proxy---5*[{docker-proxy}]
        |-2*[docker-proxy---4*[{docker-proxy}]]
        |-docker-proxy---8*[{docker-proxy}]
        `-28*[{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

显示docker的所有子项,包括名称空间更改(-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 :(得分:1)

命令lxc-ls和命令lxc-ps可以安装在Linux发行版上。这将允许您分别列出正在运行的LXC容器和在这些容器中运行的进程。您应该能够使用流将lxc-ls的输出链接到lxc-ps并获取所有容器化进程的列表。

最大的警告是您指定了Docker并且并非每个Docker实例都在LXC上运行,也不一定是localhost进程。 Docker定义了一个可以调用以列出远程Docker实例的API,因此这种技术也无助于枚举远程机器上的进程。

答案 2 :(得分:0)

在windows docker中表现得有点不同。 它的进程不是作为父进程的子进程运行,而是作为主机上的单独进程运行。

可以通过(例如)powershell查看它们,例如

Get-Process powershell

例如,在运行microsoft / iis容器时获取主机上的进程将包含额外的PowerShell进程(因为ms / iis容器将powershell作为主可执行进程运行)。

相关问题