我是一名新手去程序员,具有系统编程背景,试图剖析libcontainer。我对名称空间和控制组非常熟悉。我很想知道libcontainer如何利用这些功能来创建容器。
从逻辑上讲,有人必须使用NEW_NS_FLAGS拨打克隆系统调用。但我无法找到此克隆系统调用的位置!!
Documentations说,必须使用工厂界面来创建容器。我看到它只是为id和config执行验证工作并创建具有700权限的目录。
container.start ,应该创建一个新的名称空间,也不会调用克隆系统调用。
如果有人可以告诉我,容器创建如何在系统调用方面起作用,那将非常有用。
答案 0 :(得分:0)
我对此感兴趣,并且刚刚开始深入研究代码。
我相信你要找的是在nsexec.c中完成的,它读取(或者通过使用netlink消息的unix套接字传递)命名空间设置的配置,然后调用clone()两次。
在子进程中,我认为它调用setns()来创建命名空间或将命名空间设置为新值。
对我来说,整个事情并不完全清楚,但从目前我似乎理解的情况来看,使用libcontainer的过程本身就是一个" init"它在新容器中成为PID 1,看起来这个新进程在C中做了一些事情,并且去设置容器。