【发布时间】: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