如何知道一个进程正在docker下运行

我可能会问一个非常初学者的问题,但是我需要一种方法来区分docker和non-docker之间的过程。 'ps'命令的命令输出给了我一个感觉,就是在linux中运行进程,不能确认是否在docker下。

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

是相同的可行或有任何其他解决scheme相同?

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

2924(haproxy)的父进程是2902
父进程到2902(haproxy-start)是2881
2881将是dockerd进程pipe理的dockerd docker-container

要以树形格式查看进程列表,请使用ps -ejHpstree (可在psmisc软件包中find)

获取在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 

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

需要注意的是,你指定了Docker ,并不是每个Docker实例都在LXC上运行,也不一定是本地主机进程。 Docker定义了一个可以被调用来列出远程Docker实例的API,所以这个技术也不会帮助枚举远程计算机上的进程。

在窗口泊坞窗行为有点不同。 它的进程不作为父进程的subprocess运行,而是作为主机上的单独进程运行。

他们可以通过(例如)powershell来查看

 Get-Process powershell 

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