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 を再作成することで直る様子。
やはり、再起動はすべてを解決する…!!