gpt4 book ai didi

docker - 无法使用 Go SDK for Docker 推送图像

转载 作者:行者123 更新时间:2023-12-01 22:27:14 27 4
gpt4 key购买 nike

我正在尝试使用 Go SDK 库将图像推送到 Docker 集线器。
拉图像,标记等工作,但我无法推送图像。

该程序也不会引发任何错误。

package main

import (
"context"
"encoding/base64"
"encoding/json"

"github.com/docker/docker/api/types"
"github.com/docker/docker/client"
)

func check(err error) {
if err != nil {
panic(err)
}
}

func main() {
ctx := context.Background()

cli, err := client.NewEnvClient()
check(err)

err = cli.ImageTag(ctx, "alpine:3", "docker.io/jerrymannel/alpine:3")
check(err)

authConfig := types.AuthConfig{
Username: "<username>",
Password: "<password>",
}
encodedJSON, err := json.Marshal(authConfig)
check(err)
authStr := base64.URLEncoding.EncodeToString(encodedJSON)

_, err = cli.ImagePush(ctx, "docker.io/jerrymannel/alpine:3", types.ImagePushOptions{
RegistryAuth: authStr,
})
check(err)

}

最佳答案

在这之后花了一天时间,我在问这个问题 5 分钟后找到了解决方案。

我输入了错误的用户名和密码。 cli.ImagePush()如果用户名或密码错误,方法不会返回错误。

像这样修改最后几行,

pusher, err := cli.ImagePush(ctx, "docker.io/jerrymannel/alpine:3", types.ImagePushOptions{
RegistryAuth: authStr,
})
check(err)

defer pusher.Close()
io.Copy(os.Stdout, pusher)

这显示了以下消息 -
{"errorDetail":{"message":"unauthorized: incorrect username or password"},"error":"unauthorized: incorrect username or password"}

输入正确的密码,现在它可以工作了。

[更新]

Defect 36253 存在一个 Unresolved 缺陷

现在,这是处理错误的代码。

pusher, err := cli.ImagePush(ctx, "docker.io/jerrymannel/alpine:3", types.ImagePushOptions{
RegistryAuth: authStr,
})
check(err)
defer pusher.Close()

type ErrorMessage struct {
Error string
}
var errorMessage ErrorMessage
buffIOReader := bufio.NewReader(pusher)

for {
streamBytes, err := buffIOReader.ReadBytes('\n')
if err == io.EOF {
break
}
json.Unmarshal(streamBytes, &errorMessage)
if errorMessage.Error != "" {
panic(errorMessage.Error)
}
}

关于docker - 无法使用 Go SDK for Docker 推送图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59232853/

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