Сбой Docker ImagePush с «без базовых учетных данных» - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь использовать docker go-sdk для передачи изображения в AWS ECR.

Это код, который я использую для отправки изображения.

где tag =".dkr.ecr.us-east-1.amazonaws.com / api: mytag"

func Push(c context.Context, tag string, credentials string) error {
    cli, err := client.NewClient(apiSocket, apiVersion, nil, apiHeaders)
    if err != nil {
        return err
    }
    fmt.Println(credentials)

    resp, err := cli.ImagePush(c, tag, types.ImagePushOptions{
        RegistryAuth: credentials,
    })
    if err != nil {
        panic(err)
    }

    io.Copy(os.Stdout, resp)
    resp.Close()

    return nil
}

Но я продолжаю получать такой ответ:

{"status":"The push refers to repository [<id>.dkr.ecr.us-east-1.amazonaws.com/api]"}
{"status":"Preparing","progressDetail":{},"id":"23432919a50a"}
{"status":"Preparing","progressDetail":{},"id":"9387ad10e44c"}
{"status":"Preparing","progressDetail":{},"id":"e2a4679276bf"}
{"status":"Preparing","progressDetail":{},"id":"31c5c8035e63"}
{"status":"Preparing","progressDetail":{},"id":"a73789d39a06"}
{"status":"Preparing","progressDetail":{},"id":"f36942254806"}
{"status":"Preparing","progressDetail":{},"id":"4a2596f9aa79"}
{"status":"Preparing","progressDetail":{},"id":"5cf3066ccdbc"}
{"status":"Preparing","progressDetail":{},"id":"76a1661c28fc"}
{"status":"Preparing","progressDetail":{},"id":"beefb6beb20f"}
{"status":"Preparing","progressDetail":{},"id":"df64d3292fd6"}
{"status":"Waiting","progressDetail":{},"id":"beefb6beb20f"}
{"status":"Waiting","progressDetail":{},"id":"df64d3292fd6"}
{"errorDetail":{"message":"no basic auth credentials"},"error":"no basic auth credentials"}

Есть идеи?

Примечания:

  • Я проверил, что строка учетных данных, которую я передаю, является пользователем в кодировке base64: пропуск для реестра ECR.
  • Я подтвердил, что учетные данные ECR, которые я получаю, находятся в том же регионе AWS, в котором я пытаюсь отправить изображение.

1 Ответ

0 голосов
/ 05 декабря 2018

Я обнаружил в комментарии GitHub, что RegistryAuth на самом деле должен быть строкой JSON base64 с полями имени пользователя и пароля.Тьфу.Это недокументировано в репозитории Docker.

RegistryAuth = "{ \"username\": \"myusername\", \"password\": \"mypassword\", \"email\": \"myemail\" }

Соответствующий комментарий GitHub .

Это работает для меня сейчас.

...