也许应该反过来说,怎么使用 nerdctl 操作 k3s 自带的 containerd
系统上安装了 k3s 但是想使用 nerdctl 去操作 containerd 的时候,只是指定 k3s containerd 的 socket 发现并不能看到导入的镜像或者运行中的容器
nerdctl -H /run/k3s/containerd/containerd.sock images
REPOSITORY TAG IMAGE ID CREATED PLATFORM SIZE BLOB SIZE
nerdctl -H /run/k3s/containerd/containerd.sock ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
搜了下发现了官方 issue 中已经有人回答了,需要额外指定 --namespace=k8s.io
nerdctl -H /run/k3s/containerd/containerd.sock --namespace=k8s.io images
REPOSITORY TAG IMAGE ID CREATED PLATFORM SIZE BLOB SIZE
mysql 5.7.37-debian 85334e890204 3 months ago linux/amd64 441.5 MiB 433.9 MiB
关于 containerd namespace 的说明可以参考文档:https://github.com/containerd/containerd/blob/main/docs/namespaces.md
相关源码应该就是这两个位置:
https://github.com/k3s-io/k3s/blob/master/pkg/agent/containerd/containerd.go#L166 https://github.com/containerd/containerd/blob/main/pkg/cri/constants/constants.go