containerd 构建时支持 OCI 并支持 runc 提供的高级功能。

containerd 的开发版和预发布版可能取决于 runc 中未发布的功能,可能需要特殊的 runc 构建,CI test 中 runc 的版本可以在 [script/setup/runc-version](https://github.com/containerd/containerd/blob/261c107ffc4ff681bc73988f64e3f60c32233b37/script/setup/runc-version) 中找到,它可能指向一个 runc 仓库中的 git commit 或者 tag。

对于 containerd 的稳定版,我们尝试使用发布的 runc 版本,我们推荐使用一个与 [script/setup/runc-version](https://github.com/containerd/containerd/blob/261c107ffc4ff681bc73988f64e3f60c32233b37/script/setup/runc-version) 文件中相等或者更高的 runc 版本。

如果你发生了任何运行时错误,请确保你的 runc 与在这个文件中的 commit 或者 tag 同步。

building

更多关于如何克隆和构建 runc,请参考 runc 的构建文档

在构建 runc 之前,你可能需要安装额外的构建依赖,这将会随着平台变化。例如,在 Ubuntu 上,你将会安装 libseccomp

在你的 opencontainers/runc 仓库中运行

  1. make && sudo make install

从 runc 1.0.0-rc93 开始,“selinux” 和 “apparmor” tags 已经被移除,runc 构建时 SELinux, AppArmor 和 seccomp 默认被支持。请注意,可以通过传递一个空的 BUILDTAGS make 变量来禁用“seccomp”,但强烈建议保持启用状态。

默认情况下,runc 是在启用内核内存限制支持的情况下编译的。 此功能在内核 5.4 及更高版本中已弃用,并且已知在 RHEL7 和 CentOS 7 3.10 内核上被破坏。 对于这些内核,我们建议使用 nokmem 构建标签禁用 kmem 支持。 这样做时,请务必设置 seccomp build-tag 以启用 seccomp 支持,例如:

  1. make BUILDTAGS='nokmem seccomp' && make install

有关 nokmem 构建标签的详细信息,请参阅 opencontainers/runc#2594 上的讨论。 有关构建 runc 的更多详细信息,请参阅 runc README 中的构建说明。