簡體   English   中英

無法直接使用基於容器的 CLI 從 Docker 管理的容器中檢索數據

[英]Unable to retrieve data from Docker-managed containerd by using containerd-based CLI directly

這是我想要完成的事情:

運行 Docker 並能夠從 containerd 的 API 管理其圖像/容器。 這純粹是一種教育練習。

我試過的:

  1. 啟動 dockerd
  2. 已驗證我有一個工作守護進程:
$ docker images
REPOSITORY                         TAG                 IMAGE ID            CREATED             SIZE
mcr.microsoft.com/dotnet/runtime   latest              ec54a6c985a0        11 days ago         186MB
  1. 安裝了 nerdctl以用作 containerd 的 CLI。
  2. 嘗試連接到 Docker 管理的 containerd 的相同套接字和命名空間,但沒有得到任何結果:
$ nerdctl --address /var/run/docker/containerd/containerd.sock -n moby images
REPOSITORY    TAG    IMAGE ID    CREATED    SIZE
  1. 我也試過直接從 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 的運行時組件,但不是(還沒有?)圖像存儲和快照器,這就是為什么你看不到圖像,只有容器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM