为什么现在的golang docker sdk中的ImageList方法只能获得本地仓库的镜像信息而不能获取远程hub仓库的镜像信息了除了golang docker sdk以为docker hub api中有提供获取访问远程hub仓库的镜像信息方法吗如何实现
目前的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)
}
}
``
原文地址: https://www.cveoy.top/t/topic/fi1h 著作权归作者所有。请勿转载和采集!