如何使用golang SDK获取存储在Google ArtifactRegistry中的docker镜像的manifest

问题描述 投票:0回答:1

我正在尝试使用此 golang sdk 与 Google Artifact Registry 进行交互:https://google pkg.go.dev/cloud.google.com/go/artifactregistry/apiv1

似乎缺少很多文档和示例。

如何获取给定

artifactregistrypb
docker 镜像的清单数据(或清单文件下载 URL)?

import (
    artifactregistry "cloud.google.com/go/artifactregistry/apiv1"
    "cloud.google.com/go/artifactregistry/apiv1/artifactregistrypb"
     ...
)


func do(ctx context.Context) {
    client, err := artifactregistry.NewClient(ctx)
    if err != nil {
        log.Fatal(err)
    }
    defer client.Close()

    repoPath := fmt.Sprintf("projects/%s/locations/%s/repositories/%s", projectID, location, repo)

    dockerImg := getDockerImage(ctx, client, repoPath)

    // dockerImg is of type *artifactregistrypb.DockerImage

    // get the manifest file corresponding to dockerImg
}

我可以使用一个

ListFiles
方法,但我不确定如何在dockerImg和相应的清单文件之间进行匹配。

我本质上寻找的是类似于 AWS GetDownloadUrlForLayer ECR API。

go google-artifact-registry
1个回答
0
投票

最终直接使用

github.com/containers/image/v5/docker
来获取图像blob,而不是使用SDK。

import(
    artifactregistry "cloud.google.com/go/artifactregistry/apiv1"
    "golang.org/x/oauth2/google"
    dockeref "github.com/containers/image/v5/docker/reference"
    imgtypes "github.com/containers/image/v5/types"
    "github.com/containers/image/v5/docker"
)


func do(ctx context.Context) ([]byte, error) {
    namedRef, err := dockeref.ParseDockerRef("us-west1-docker.pkg.dev/my-project/my-repo/image-name:latest")
    if err != nil {
        return nil, err
    }
    ref, err := docker.NewReference(namedRef)
    if err != nil {
        return nil, err
    }
    creds, err := google.FindDefaultCredentials(ctx, artifactregistry.DefaultAuthScopes()...)
    if err != nil {
        return nil, err
    }

    token, err := creds.TokenSource.Token()
    if err != nil {
        return nil, err
    }

    img, err := ref.NewImage(ctx, &imgtypes.SystemContext{
        DockerBearerRegistryToken: token.AccessToken,
    })
    if err != nil {
        return nil, err
    }

    return img.ConfigBlob(ctx) 
}
© www.soinside.com 2019 - 2024. All rights reserved.