主机进程列表中显示的Docker进程

我使用docker设置了Selenium服务器,基本上遵循这个 github教程。

我没有设置服务器的问题,但我注意到,我在Docker镜像中开始的进程实际上显示在我的主机进程列表中。

在这里输入图像说明

正如你在屏幕截图中看到的那样,docker运行了一个bash脚本,同时也执行了一个jar文件,我认为这个jar文件应该只发生在box里面。 这是否意味着来自主机的用户可能会杀死容器外的某个进程,这将彻底搞乱盒子里的世界?

当我停下来的时候,所有的过程都如我所愿地走了。

这是Docker的devise方式..有缺陷的隔离是你必须接受的轻量级与Virtualbox / Vagrant相比…或者我做错了什么?

谢谢!

是的,这是预期的。 请注意,进程是由root启动的,所以具有root权限的用户可以终止它们,但具有root权限的用户可以做得比这更糟(例如,卸载docker o_O)。

这种“有缺陷”的隔离实际上有一些很大的好处,比如能够监视主机上运行的单个监视器进程中运行在所有容器中的进程。

这似乎是关于Docker是轻量级虚拟机的常见误解 ,这就是为什么有些人可能会期望与VirtualBox或VMWare类似的行为,但速度更快。

Docker不使用虚拟化,所以本地主机内核运行的所有进程都是相互隔离的。 非root用户不能杀死容器内的进程,但root可以停止整个容器,不仅会杀死一个进程。

为了区分容器内运行的进程和其他进程,运行top然后按shift+f并selectnsPID和nsUSER,如附图所示。

然后你会看到每个进程旁边的命名空间,如果它直接在服务器上运行,这个值很可能是空的,如果在容器内运行的进程,你会看到每个容器的命名空间id。 (您可以按名称空间进行sorting以查看每个容器中的进程)

顶端的nsPID和nsUSER