目前的golang docker sdk中的ImageList方法只能获取本地仓库的镜像信息,因为该方法是通过本地的docker daemon获取镜像信息的。如果要获取远程hub仓库的镜像信息,需要使用Docker Hub API。

Docker Hub API提供了获取远程hub仓库的镜像信息的方法。可以使用HTTP GET请求访问以下URL获取镜像列表:

https://hub.docker.com/v2/repositories/{namespace}/{repository}/tags/?page_size={page_size}&page={page}

其中,{namespace}和{repository}分别表示Docker Hub中的命名空间和仓库名称,{page_size}和{page}分别表示每页的镜像数量和要获取的页数。

例如,要获取Docker Hub中命名空间为library,仓库名称为ubuntu的所有镜像信息,可以使用以下URL:

https://hub.docker.com/v2/repositories/library/ubuntu/tags/?page_size=100&page=1

实现方法如下:

import (
    "encoding/json"
    "fmt"
    "net/http"
)

type Image struct {
    Name string `json:"name"`
}

type ImageList struct {
    Results []Image `json:"results"`
}

func GetRemoteImageList(namespace, repository string) ([]Image, error) {
    var images []Image
    page := 1
    pageSize := 100
    for {
        url := fmt.Sprintf("https://hub.docker.com/v2/repositories/%s/%s/tags/?page_size=%d&page=%d", namespace, repository, pageSize, page)
        resp, err := http.Get(url)
        if err != nil {
            return nil, err
        }
        defer resp.Body.Close()
        var imageList ImageList
        err = json.NewDecoder(resp.Body).Decode(&imageList)
        if err != nil {
            return nil, err
        }
        images = append(images, imageList.Results...)
        if len(imageList.Results) < pageSize {
            break
        }
        page++
    }
    return images, nil
}

func main() {
    images, err := GetRemoteImageList("library", "ubuntu")
    if err != nil {
        fmt.Println(err)
        return
    }
    for _, image := range images {
        fmt.Println(image.Name)
    }
}
``
为什么现在的golang docker sdk中的ImageList方法只能获得本地仓库的镜像信息而不能获取远程hub仓库的镜像信息了除了golang docker sdk以为docker hub api中有提供获取访问远程hub仓库的镜像信息方法吗如何实现

原文地址: https://www.cveoy.top/t/topic/fi1h 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录