zl程序教程

您现在的位置是:首页 >  工具

当前栏目

Docker container与宿主进程相互隔离的实现原理

Docker进程原理 实现 相互 隔离 container 宿主
2023-09-14 09:03:10 时间

我们都知道在Docker container里运行ps命令是看不到宿主机上运行的进程的。这种程度的隔离是通过什么方式实现的呢?

答案是Linux内部命令unshare。

我第一次执行命令unshare /bin/bash,然后再执行ps -ef --forest,发现通过unshare命令fork的新的进程里,因为其pid和父进程pid的namespace相同,因此ps -ef的结果和在父进程上执行相同。

在这里插入图片描述
下面我还是执行unshare,不过加上参数:
unshare --pid --mount-proc --fork /bin/bash

在这里插入图片描述
在这里插入图片描述
这样从namespace级别进行了父进程和fork出的子进程的隔离。现在我在子进程里再执行ps -ef --forest, 从结果能发现确实只能看到子进程本身的bash和ps进程了。

在这里插入图片描述