gpt4 book ai didi

docker - 无法使用 docker engine-api 和长生命周期 JSON 文件从 GCR 注册表中提取

转载 作者:行者123 更新时间:2023-12-02 18:54:03 24 4
gpt4 key购买 nike

在谷歌云容器注册表的高级身份验证方法文档中,解释了一种使用带有 docker cli 的 JSON key 文件登录注册表的方法,这很好用

$ docker login -u _json_key -p "$(cat keyfile.json)" https://gcr.io



但是我正在尝试使用相同的 keyfile.json 文件使用 golang docker/engine-api 登录到注册表库,我有一些工作代码,这似乎可以很好地在其他注册表中进行身份验证,但始终提供具有以下结构的文件
{
"auths": {
"cr.whatever.com": {
"password": "PASSWORD",
"username": "registry"
}
}
}

通过 Unmarshal文件到 ImageBuildOptions功能 here然后被消耗 here

但是在使用 keyfile.json 时不起作用或工作 config.json ...

docker 文档指出应该使用带有用户名和密码的 JSON base64 编码对象,如 here 所述。进入标题参数部分。

我尝试了多个选项来生成可以成功使用到 docker X-Registry-Config 中的文件头没有太多运气...

任何帮助/提示将不胜感激。

谢谢!

最佳答案

感谢您的帮助jsand ,我终于起草了一个工作代码功能如下

func (d *DockerEngineClient) BuildImage(archive, modelId string, authConfigs map[string]types.AuthConfig) (types.ImageBuildResponse, error) {
buildContext, err := os.Open(archive)
defer buildContext.Close()

c, err := ioutil.ReadFile(os.Getenv("GOOGLE_APPLICATION_CREDENTIALS_FILE"))
if err != nil {
return err
}

var authConfigs2 map[string]types.AuthConfig
authConfigs2 = make(map[string]types.AuthConfig)

authConfigs2["gcr.io"] = types.AuthConfig{
Username: "_json_key",
Password: string(c),
ServerAddress: fmt.Sprintf("https://%s", d.remoteRegistryPrefix),
}

buildOptions := types.ImageBuildOptions{
Tags: []string{fmt.Sprintf("%s/%s", d.remoteRegistryPrefix, modelId)},
AuthConfigs: authConfigs2,
}

var buildResponse types.ImageBuildResponse

buildResponse, err = d.client.ImageBuild(context.TODO(), buildContext, buildOptions)
if err != nil {
return buildResponse, err
}

b, _ := ioutil.ReadAll(buildResponse.Body)
fmt.Printf("%s\n", b)
buildResponse.Body.Close()

return buildResponse, err
}

关于docker - 无法使用 docker engine-api 和长生命周期 JSON 文件从 GCR 注册表中提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47682134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com