go-containerregistry package 列出所有项目/组织的 GCR 存储库

go-containerregistry package lists GCR repositories from all projects / organizations

我正在使用以下代码列出我的 docker GCR 中可用的存储库

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,但调用上述程序将列出 ALL 回购 ALL 个组织和 ALL 个项目我的 gcloud 有权访问。

有没有办法限制上面的代码,使其列出特定 org/project 的 gcr 存储库?

请注意,gcloud config set project 仅适用于 gcloud (CLI) 命令,不适用于 SDK。

好像这个SDK只实现了DockerAPI,不理解项目的概念。这里的建议是迁移到Artifact Registry. You could easily get a list of the repos of a particular project using the list method of the REST Resource projects.locations.repositories。在这里您可以找到一个 HTTP GET 示例:

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


创建和编辑此答案是为了让社区更清楚地看到评论中给出的解决方案