【问题标题】:Why does running top inside docker container only show processes inside the container?为什么在 docker 容器内运行 top 只显示容器内的进程?
【发布时间】:2019-04-17 22:36:47
【问题描述】:

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

【问题讨论】:

  • 容器伪装成一台小电脑。这与您可以在云中运行的虚拟机上启动任务管理器的原因相同,而不会看到在该特定虚拟机管理程序上运行的 7250 亿个其他进程。
  • 类似的例子用另一种方式表述:如果您通过 SSH 连接到另一台服务器并运行 top,您将只能看到该服务器上的进程,而不是您的计算机。
  • 肯定与上述两个 cmets 相同。 :) Docker 不是虚拟机。它不像虚拟机那样模拟物理计算机,而是在相同的操作系统下运行。至于和SSH的比较……嗯……

标签: linux docker


【解决方案1】:

为了理解为什么会发生这种情况,您需要了解 Docker 正在利用的 Linux 的基本概念。

Linux 内核中有一个名为namespaces 的功能,它以一组进程看到一组资源而另一组进程看到另一组资源的方式对主机资源进行分区/隔离。

Linux 有 7 种命名空间:

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

当你在你的 linux 机器上工作时,你所做的一切都在同一个命名空间上,但是当你默认通过 docker run 创建一个容器时,它会创建一个新的单独的命名空间来将容器与你的主机隔离。

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

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

【讨论】:

    猜你喜欢
    • 2022-10-04
    • 2016-04-06
    • 2014-12-11
    • 2017-05-01
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2019-10-10
    相关资源
    最近更新 更多