为什么在docker容器内运行top仅显示容器内的进程?

时间:2019-04-17 14:12:29

标签: linux docker

我正在docker容器中运行top,并且看到显示的唯一进程是用于运行容器和top的初始进程。为什么它显示此内容而不是在Docker主机上也显示其他进程?

1 个答案:

答案 0 :(得分:3)

为了了解为什么会这样,您需要了解Docker利用的Linux基本概念。

Linux内核中有一个称为namespaces的功能,该功能可以通过一组进程看到一组资源的方式来分区/隔离主机资源,而另一组进程看到另一组资源的方式。

Linux有7种类型的名称空间:

  • 安装-隔离安装点
  • UTS-隔离主机名
  • IPC-隔离进程间通信资源
  • PID-隔离PID号空间
  • 网络-隔离网络接口
  • 用户-隔离UID / GID数字空间
  • Cgroup-隔离cgroup根目录

在Linux机器上工作时,所做的所有操作都在同一命名空间上,但是默认情况下,通过执行docker run创建容器时,它将创建一个新的单独的命名空间以将容器与您的容器隔离主机。

在您的问题的特定情况下,您看到的只是一个进程正在运行,因为该容器与主机位于不同的PID名称空间中。

创建容器时,您可以使用--pid="host"告诉Docker共享相同的PID名称空间,在某些情况下这样做很有用。