【问题标题】:go-containerregistry package lists GCR repositories from all projects / organizationsgo-containerregistry 包列出了来自所有项目/组织的 GCR 存储库
【发布时间】:2021-11-15 19:33:11
【问题描述】:

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

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 存储库以及我的gcloud 有权访问的所有个项目。

有没有办法限制上面的代码,以便列出特定组织/项目的 gcr 存储库?

【问题讨论】:

  • 我在查看Container Registry API,那里没有解释这样做(似乎只实现了Docker API,不了解项目的概念)。建议迁移到Artifact Registry。这是您可以做出的改变吗?还是您需要使用 Google Container Registry?
  • 不幸的是,这必须在 GCR 中完成......
  • 我没有意识到这个 SDK 存在。在其中创建 GCR 存储库(而非注册表)的 GCP 项目名为 [(us|eu|..).]gcr.io/${PROJECT}。注册表根是gcr.io。还有一个NewRepository 方法也可以允许引用项目来只给你那些图像。
  • 是的,但作为第一步,我想列出存储库(以便稍后列出图像)。
  • 项目是 GCP 中的主要资源容器。您可能希望枚举 Org 中的项目,然后使用上述方法枚举存储库的内容(!)。您可以检查项目中是否启用了 GCR,但尝试枚举其图像可能更容易。但是,这可能是您必须继续的方式。

标签: go google-cloud-platform gcloud google-container-registry


【解决方案1】:

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

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

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


创建和编辑此答案是为了使 cmets 中给出的解决方案对社区更加可见

【讨论】:

    猜你喜欢
    • 2013-09-09
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 2019-08-31
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    相关资源
    最近更新 更多