如何解决无法直接使用基于容器的 CLI 从 Docker 管理的容器中检索数据
这是我想要完成的:
运行 Docker 并能够从 containerd 的 API 管理其图像/容器。这纯粹是一种教育练习。
我尝试过的:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mcr.microsoft.com/dotnet/runtime latest ec54a6c985a0 11 days ago 186MB
$ nerdctl --address /var/run/docker/containerd/containerd.sock -n moby images
REPOSITORY TAG IMAGE ID CREATED SIZE
- 我也尝试过直接从 Go 执行此操作,但仍然没有得到任何结果:
package main
import (
"context"
"log"
"github.com/containerd/containerd"
"github.com/containerd/containerd/namespaces"
)
func main() {
if err := test(); err != nil {
log.Fatal(err)
}
}
func test() error {
client,err := containerd.New("/var/run/docker/containerd/containerd.sock")
if err != nil {
return err
}
defer client.Close()
ctx := namespaces.WithNamespace(context.Background(),"moby")
images,err := client.Listimages(ctx)
if err != nil {
return err
}
log.Printf("%v images\n",len(images))
return nil
}
我获得成功连接这一事实表明事情进展顺利。我只是不明白为什么在 Docker 命令和直接调用 containerd 之间没有看到相同的结果。
解决方法
得到 Docker 维护者 Sebastiaan van Stijn 的答复:
dockerd 使用了 containerd 的运行时组件,但(还)没有使用镜像存储和快照器,这就是为什么你看不到镜像,只能看到容器
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。