如何在 runc 和 oci 之间切换 docker 运行时

如何在 runc 和 oci 之间切换 docker 运行时

我从 Fedora 的默认仓库安装了 docker 引擎。
将 Fedora 更新到 26 后,我在使用容器时遇到了一些非常奇怪的问题。

我在以下位置发现了这一点docker info

运行时:oci runc
默认运行时:oci

另一台安装了docker的电脑yum.dockerproject.orgdocker info只有runc:

运行时:runc
默认运行时:runc

我搜索了很多地方,但找不到任何关于切换此运行时的文档。

答案1

这就是我如何将默认运行时从运行克伦在 Ubuntu 上。

只需编辑~/.config/docker/daemon.json,并添加crun到运行时列表,然后设置crun为默认运行时。

{
  "default-runtime": "crun",
  "runtimes": {
    "crun": {
      "path": "/usr/bin/crun"
    }
  }
}

现在重新启动docker服务(systemctl restart --user docker

注意:如果你没有在无根模式,您将需要编辑/etc/docker/daemon.json

来源

https://github.com/containers/crun/issues/37

答案2

docker 复制代码,有以下选项:

--default-runtime string                Default OCI runtime for containers (default "runc")

这更容易配置/etc/docker/daemon.json 文件

{
  "default-runtime": "runc"
}

然后从 systemd,您可以通过重新加载来应用更改(无需重新启动引擎并停止运行容器):

systemctl reload docker

请注意,守护进程中的更改可能不会影响已创建的容器,因此您可能需要创建新的容器才能看到此更改的效果。

要在单个容器上更改运行时,您可以从 进行操作docker run。有以下选项(在 中可见docker run --help):

--runtime string                 Runtime to use for this container

Compose 文件有类似的运行时:runc句法。

当有人问这个问题时,我不太清楚 docker 所说的 oci vs runc 是什么意思,它可能是在他们分叉 runc 代码时区分 docker 引擎中的内置运行时。这早已结束,您只会在当前的 docker 安装中看到 runc 和 containerd.runc 运行时。措辞令人困惑的原因是runc 是一个 OCI 项目

相关内容