Docker

如何在runc和oci之間切換docker執行時

  • August 24, 2021

我從 Fedora 的預設倉庫安裝了 docker 引擎。

將 fedora 更新到 26 後,我在使用容器時遇到了一些非常奇怪的問題。

我發現這個docker info

執行時:runc

預設執行時:oci

另一台帶有 docker from 的電腦yum.dockerproject.orgdocker info只有 runc:

執行時:runc

預設執行時:runc

我搜尋了很多地方,但找不到任何有關切換此執行時的文件。

這就是我在 Ubuntu 上將預設執行時從runc更改為crun的方式。

只需編輯~/.config/docker/daemon.json並添加crun到執行時列表,然後設置crun為預設執行時。

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

現在重新啟動 docker 服務 ( systemctl restart --user docker)

注意:如果您沒有在無根模式下執行 docker,則需要改為編輯/etc/docker/daemon.json.

來源

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

dockerd中,有以下選項:

--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語法。

當被問到這個問題時,我不太確定 oci 與 runc back 的 docker 是什麼意思,當他們分叉 runc 程式碼時,它可能是在 docker 引擎中的內置執行時之間進行區分。這早就完成了,您只會在目前的 docker 安裝中看到 runc 和 containerd.runc 執行時。措辭令人困惑的原因是runc 是一個 OCI 項目

引用自:https://serverfault.com/questions/864836