我正在使用 google 容器注册表来托管我的 docker 映像。我也在使用 golang 的 moby 客户端与之交互。我正在使用JSON 服务密钥方法,该方法似乎与 RegistryLogin 配合良好。响应文本是登录成功。但是,我不知道如何将返回的身份验证密钥与 ImagePull 一起使用。在后台设置 RegistryAuth 似乎设置了作为 X-Registry-Auth 标头传递的任何字符串,Google 似乎没有在任何地方提及这一点。
我尝试将返回的密钥作为 RegistryAuth 传递,我尝试运行 RegistryLogin,然后在没有 RegistryAuth 的情况下进行拉取。我已经尝试过 base64 编码我的身份验证配置并将其发送到 RegistryAuth。无论我尝试什么,我都会收到“来自守护进程的错误响应:找不到存储库 xxx:不存在或没有拉取访问权限”。运行 docker login 然后 docker pull 使用相同的详细信息在 cli 上运行良好。我的代码是:
authConfig := types.AuthConfig{
Username: "_json_key",
Password: string(decodedKey),
ServerAddress: "https://gcr.io",
}
_, err = engine.Client.RegistryLogin(ctx, authConfig)
if err != nil {
return err
}
responseBody, err := engine.Client.ImagePull(ctx, image, types.ImagePullOptions{
})
defer responseBody.Close()
if err != nil {
return err
}
decodedKey 是 JSON 密钥文件内容。任何想法如何让它发挥作用?