首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >and容器、runc和nsenter引导带

and容器、runc和nsenter引导带
EN

Stack Overflow用户
提问于 2017-03-09 13:24:15
回答 2查看 700关注 0票数 1

我对坞/容器相当陌生,并试图通过查看代码来更好地理解它。

看一下runC,它看起来就像以前的代码库中的nsinit一样使用dig容器,并且我试图用它作为一个起点来理解如何使用dig容器,以及更深入地了解dig容器的工作方式。

其中一件我觉得有点棘手的事情是引导过程和对nsexec的C代码的调用。

我确实广泛地理解,在调用应用程序(runC/libcontainer)将控制权移交给容器进程之前,需要对名称空间等进行一些初始化,但我似乎找不到对此的一步一步的好解释。有人知道这个地区有什么好医生吗?

我是否正确地假设,作为引导过程的一部分,C代码将使用"init“cmd行标志调用(克隆/子) runC?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-16 00:56:18

这是一个解释。你可以读本文件,但老实说,它有点过时了.实际上,这就是它的工作方式。

当您在Go程序中导入"github.com/opencontainers/runc/libcontainer/nsenter"时,我们有一些神奇的__attribute__内容,告诉Go编译器在运行时“引导”之前让nsexec运行。实际上,这意味着每次运行任何runC程序时,我们的代码(在github.com/opencontainers/runc/libcontainer/nsenter/nsexec.c中)都会在Go运行时开始之前运行。

当您运行正常的用户进程时,这段代码实际上不会做任何事情,只需要调用runC。但是,如果您的进程将是容器init进程(它有_LIBCONTAINER_INITPIPE环境变量集),那么它将从_LIBCONTAINER_INITPIPE指定的文件描述符读取大量配置信息,并相应地设置名称空间和其他内容。所有这些设置完成后,函数将返回,Go运行时将引导到runc init代码中,然后该代码将完成容器的设置。

所有这些代码都非常类似于libcontainer在runC拆分之前的工作方式。

票数 1
EN

Stack Overflow用户

发布于 2017-03-09 13:51:57

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42696589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档