我需要使用此包库以编程方式(使用 golang)登录 gcr.io docker 注册表https://godoc.org/github.com/docker/docker/client我尝试过使用它,我可以成功登录,但是在将图像推送到我的 gcr.io 项目注册表时,它说{"errorDetail":{"message":"unauthorized: You don't have the needed permissions to perform this operation, and you may have invalid credentials. To authenticate your request, follow the steps in: https://cloud.google.com/container-registry/docs/advanced-authentication"},"error":"unauthorized: You don't have the needed permissions to perform this operation, and you may have invalid credentials. To authenticate your request, follow the steps in: https://cloud.google.com/container-registry/docs/advanced-authentication"}您可以看一下该CopyImage方法,其中 被option.DestRegistryAuth分配了输出gcloud auth print-access-token。用户名设置为“oauth2accesstoken”,因为我遵循了以下说明: https ://cloud.google.com/container-registry/docs/advanced-authentication至于source参数,假设它来自公共注册表,如 docker.io/library/alpine:3.10,因此我们可以在不配置任何身份验证令牌的情况下提取它。但是对于dest参数,目前它是我的私人注册表中的图像,例如:asia.gcr.io/<gcp-project-id>/alpine:3.10另外,gcloud auth print-access-token在我这样做之后调用,gcloud auth login并且我已经拥有访问我的私人 asia.gcr.io 注册表的完全权限(在存储桶级别分配)。现在奇怪的是,我可以在此处描述docker push之后使用命令成功推送它https://cloud.google.com/container-registry/docs/advanced-authentication。docker login有什么建议吗?
1 回答
喵喵时光机
TA贡献1846条经验 获得超7个赞
事实证明,RegistryAuth
types.ImagePush 选项中的 arg 需要一个 base64 编码字符串。
因此,使用此代码,我可以成功地将本地映像推送到我的私有注册表。
authConfig := types.AuthConfig{
Username: "oauth2accesstoken",
Password: option.DestRegistryAuth,
}
encodedJSON, err := json.Marshal(authConfig)
if err != nil {
return fmt.Errorf("error when encoding authConfig. err: %v", err)
}
authStr := base64.URLEncoding.EncodeToString(encodedJSON)
rc, err = destClient.DockerClient.ImagePush(ctx, dest, types.ImagePushOptions{
RegistryAuth: authStr,
})
- 1 回答
- 0 关注
- 134 浏览
添加回答
举报
0/150
提交
取消