You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Golang列出GCR中的所有Docker仓库

Go语言枚举GCR所有仓库的实现方案

你可以直接使用go-containerregistry库内置的google.Walk方法实现GCR根路径下所有仓库的递归枚举,不需要预先知道任何仓库名。

前置要求

  • 提前完成GCR身份认证,本地环境可通过gcloud auth configure-docker完成认证,程序运行时会自动读取本地认证凭据,也可通过环境变量传入Service Account密钥指定身份。
  • 你需要知道自己的GCR根路径,格式为[registry地址]/[GCP项目ID],默认全局Registry地址为gcr.io,区域级Registry可使用对应区域前缀,比如asia.gcr.io、us.gcr.io。

实现代码示例

package main

import (
	"fmt"
	"github.com/google/go-containerregistry/pkg/authn"
	"github.com/google/go-containerregistry/pkg/v1/google"
)

func main() {
	// 替换为你的GCR根路径
	gcrRoot := "gcr.io/your-gcp-project-id"

	// 递归遍历所有仓库
	err := google.Walk(gcrRoot, google.WalkOptions{
		Auth: authn.DefaultKeychain,
	}, func(repoPath string, tags *google.Tags, walkErr error) error {
		if walkErr != nil {
			return walkErr
		}
		// 打印遍历到的仓库路径
		fmt.Printf("仓库:%s\n", repoPath)
		// 可在此处继续处理当前仓库的标签、镜像信息
		for tag, manifestInfo := range tags.Manifests {
			fmt.Printf("  标签:%s,镜像哈希:%s\n", tag, manifestInfo.Digest)
		}
		return nil
	})
	if err != nil {
		panic(fmt.Sprintf("遍历GCR失败:%v", err))
	}
}

补充说明

  • 如果不需要递归遍历子仓库,可在回调函数中通过判断仓库路径的分隔符数量自行过滤一级仓库。
  • 若遍历的仓库数量较多,可在WalkOptions中配置并发参数提升遍历效率。

内容的提问来源于stack exchange,提问作者pkaramol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 05:06:03