Go-tainer注册表包列出来自所有项目/组织的GCR存储库 [英] go-containerregistry package lists GCR repositories from all projects / organizations

查看:19
本文介绍了Go-tainer注册表包列出来自所有项目/组织的GCR存储库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用以下代码列出我的dockerGCR中可用的存储库

package main

import (
    "context"
    "fmt"
    "log"

    "github.com/google/go-containerregistry/pkg/authn"
    gcr "github.com/google/go-containerregistry/pkg/name"
    "github.com/google/go-containerregistry/pkg/v1/google"
    "github.com/google/go-containerregistry/pkg/v1/remote"
)

func main() {

    auth, err := google.NewGcloudAuthenticator()
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(auth)
    registry, err := gcr.NewRegistry("gcr.io")
    if err != nil {
        log.Fatal(err)
    }
    ctx := context.Background()
    repos, err := remote.Catalog(ctx, registry, remote.WithAuthFromKeychain(authn.DefaultKeychain))
    if err != nil {
        log.Fatal(err)
    }
    for _, repoName := range repos {
        fmt.Println(repoName)
    }
}

问题是,尽管我对特定项目执行了显式gcloud config set project,但调用上述程序将列出所有组织和我的gcloud有权访问的所有项目的所有报告。

是否有办法限制上面的代码,使其列出特定组织/项目的GCR报告?

推荐答案

请注意,gcloud config set project仅适用于gcloud(命令行界面)命令,而不适用于SDK。

该SDK似乎只实现了Docker接口,并不理解项目的概念。这里的建议是迁移到Artifact Registry。您可以使用REST资源projects.locations.repositories的List方法轻松地获取特定项目的repos列表。您可以在这里找到一个HTTP GET示例:

GET /v1beta2/{parent=projects/*/locations/*}/repositories


创建和编辑此答案是为了使社区更容易看到评论中提供的解决方案

这篇关于Go-tainer注册表包列出来自所有项目/组织的GCR存储库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆