我有一个带有程序的 docker 容器,该程序将某个 C++ 代码编译为 a.out 文件,然后运行它。
当我运行它时,我在 docker 外的“top”中看到 a.out。我什至可以从外部 docker 终止这个进程。
这是预期的行为吗?即,如果一个进程在 docker 中运行,它是否可以从 docker 外部被看到和杀死?或者也许我以错误的方式使用docker?
与虚拟机不同,Docker 通过使用 Linux 命名空间机制来隔离进程(这就是我们称 Docker 为轻量级隔离环境的原因)。pid、network、uid 等有命名空间。在这种情况下,我们关心pid 命名空间。
您可以从pid_namespaces手册页中找到详细的讨论。这里我只挑出相关信息:
PID 命名空间可以嵌套:每个 PID 命名空间都有一个父级,除了初始(“根”)PID 命名空间。
进程对其 PID 命名空间中的其他进程以及每个直接祖先 PID 命名空间中的进程都可见,这些进程返回到根 PID 命名空间。在这种情况下,“可见”意味着一个进程可以成为另一个进程使用指定进程 ID 的系统调用的操作目标。
在top容器外执行命令时,您正在从顶级(根)pid 命名空间的角度检查进程。
| 归档时间: |
|
| 查看次数: |
532 次 |
| 最近记录: |