lima nerdctl run でコンテナが起動しなくなった

lima vm を作り直す


Posted on Sun, Apr 17, 2022
Tags lima, containerd

lima nerdctl run で起動しようとしたらコンテナが起動しなくなった

brew で lima を upgrade したあとに lima nerdctl run でコンテナを起動しようとしたら下記のエラーが出た。

$ lima nerdctl run -ePORT=8080 -d -p 127.0.0.1:8080:8080 your-container:latest

FATA[0051] failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error running hook #0: error running hook: exit status 1, stdout: , stderr: time="2022-04-17T08:14:05Z" level=fatal msg="failed to call cni.Setup: plugin type=\"isolation\" failed (add): incompatible CNI versions; config is \"1.0.0\", plugin supports [\"0.1.0\" \"0.2.0\" \"0.3.0\" \"0.3.1\" \"0.4.0\"]"
Failed to write to log, write /home/user.linux/.local/share/nerdctl/1935db59/containers/default/595b2dc931510df7ce240487ef836e4af101156299d7776b88e2f798cc2a90dd/oci-hook.createRuntime.log: file already closed: unknown

lima と nerdctl のバージョンは下記である。

  • lima : 0.9.2
  • nerdctl : 0.18.0

2022/04/17 現在では最新版である。issue を見ても当てはまりそうな内容がなかった。

まとめ

lima インストール時に作成される default の VM が作り直されていなかったため、古い containerd の設定が残っていた。

limactl list で qemu で作成されている VM を確認できる。

$ limactl list
NAME       STATUS     SSH                ARCH      CPUS    MEMORY    DISK      DIR
default    Running    127.0.0.1:60022    x86_64    4       4GiB      100GiB    /Users/user/.lima/default

lima を更新しても、この vm は残っているため、一度削除して再作成が必要だった。

$ limactl delete default
$ limactl start

# 無事に起動した
$ lima nerdctl run -ePORT=8080 -d -p 127.0.0.1:8080:8080 your-container:latest
3a9b933003508556ccc575c013d80d06cb70d14a1225d2f59be519a3930895d3

lima と containerd の話

簡単に言ってしまうと、lima は qemu を利用して VM を作成し、その中にインストールされている containerd を使ってコンテナを走らせる仕組みだ。 (Docker for Mac の更新通知が気になってしまい、lima & containerd でのコンテナビルドを愛用させてもらっている)

今回の事象は、もともと lima で作成していた VM のイメージやその中に生成された設定が、アップデートした lima と nerdctl (0.18.0) で非対応になってしまったため、failed to call cni.Setup: plugin type=\"isolation\" failed (add): incompatible CNI versions; config is \"1.0.0\", plugin supports [\"0.1.0\" \"0.2.0\" \"0.3.0\" \"0.3.1\" \"0.4.0\"]" というエラーにつながったのだと推測される。

トラブルシュート

lima-vm 削除して、再作成すると別のエラーが出る

$ lima nerdctl run -ePORT=8080 -d -p 127.0.0.1:8080:8080 your-container:latest

WARN[0000] environment variable XDG_RUNTIME_DIR is not set, see https://rootlesscontaine.rs/getting-started/common/login/
WARN[0000] environment variable XDG_RUNTIME_DIR is not set, see https://rootlesscontaine.rs/getting-started/common/login/
WARN[0000] environment variable XDG_RUNTIME_DIR is not set, see https://rootlesscontaine.rs/getting-started/common/login/
FATA[0000] rootless containerd not running? (hint: use `containerd-rootless-setuptool.sh install` to start rootless containerd): environment variable XDG_RUNTIME_DIR is not set, see https://rootlesscontaine.rs/getting-started/common/login/

これは、nerdctl - rootless containerd not running? · Issue #608 · lima-vm/lima で議論されている既知のエラーのようだ。 こちらも lima-vm を再作成することで直る様子。

やはり、再起動はすべてを解決する…!! (白目