Извлечь образ докера из AWS ECR с помощью удаленного API

Я следил за этим сообщением, чтобы попытаться загрузить образ Docker из AWS ECR, но получаю следующие ошибки:

If I do:

#!/bin/sh

repository="2xxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/nexus-pro"
tag="2.13.0-np-1.0"

ecr_token=$(aws ecr get-authorization-token --output text --query authorizationData[].authorizationToken | cut -d: -f2)

docker_login=$(echo "{\"username\":\"AWS\",\"password\":\"${ecr_token}\", \"auth\":\"\",\"email\":\"none\"}" | base64)

curl -X POST -d "" -H "X-Registry-Auth: ${docker_login}" http://${ip_address}:4243/images/create?fromImage=${repository}&tag=${tag_source}

Затем я получаю следующую ошибку:

$ error parsing HTTP 403 response body: invalid character 'Y' looking for beginning of value: "Your Authorization Token has expired. Please run 'aws ecr get-login' to fetch a new one."

Хотя я просто «запросил» токен.

И если я сделаю это:

#!/bin/sh

repository="2xxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/nexus-pro"
tag="2.13.0-np-1.0"

ecr_token=$(aws ecr get-login | awk '{print ($6)}')

docker_login=$(echo "{\"username\":\"AWS\",\"password\":\"${ecr_token}\", \"auth\":\"\",\"email\":\"none\"}" | base64)

curl -X POST -d "" -H "X-Registry-Auth: ${docker_login}" http://${ip_address}:4243/images/create?fromImage=${repository}&tag=${tag_source}

Я получаю следующую ошибку:

$ error parsing HTTP 404 response body: invalid character 'p' after top-level value: "404 page not found\n"

Изображение находится в ECR, и я могу получить его, если сделаю docker login ..., а затем docker pull 2xxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/nexus-pro:2.13.0-np-1.0

Я не уверен, что я делаю неправильно здесь .. Любая помощь очень ценится!


person Fadi    schedule 08.07.2016    source источник


Ответы (1)


Обычная аутентификация поддерживается только через HTTPS. Клиент Docker не будет отправлять базовые заголовки аутентификации при отправке/извлечении реестра через HTTP. Это сделано намеренно, чтобы люди не отправляли свои учетные данные по небезопасным каналам. Использование SSL должно решить эту проблему.

Попробуйте использовать ниже:

https://${ip_address}:4243/images/create?fromImage=${repository}&tag=${tag_source}

Или включите SSL-сертификат для экземпляра, откуда вы извлекаете образ. Тис может тебе помочь. http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/SSL-on-an-instance.html

person error2007s    schedule 08.07.2016
comment
Хм, теперь я получаю эту ошибку: curl: (35) error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol - person Fadi; 08.07.2016
comment
Используйте этот registry.hub.docker.com вместо https://${ip_address} - person error2007s; 08.07.2016
comment
${ip_address} — это экземпляр, на котором установлен Docker Engine. Это не реестр.. - person Fadi; 08.07.2016
comment
Хорошо, тогда вам нужно получить SSL-сертификат для этого экземпляра, потому что базовая аутентификация работает только для HTTPS. Это может помочь вам docs.aws.amazon. com/AWSEC2/latest/UserGuide/ - person error2007s; 08.07.2016
comment
Вы уверены, потому что, согласно этому сообщению: «docker remote api pull из частного реестра docker hub»> stackoverflow.com/questions/24814714/ человек сделал это без https - person Fadi; 08.07.2016
comment
Проверьте комментарии к вышеуказанному вопросу, который вы упомянули, у них это не сработало. - person error2007s; 08.07.2016
comment
Спасибо, хм.. Там упоминается разрешение базовой аутентификации через HTTP.. Интересно, реализовано ли это как-то или нет.. Но в любом случае спасибо за вашу помощь (мне придется подумать об этом с помощью другого подхода ). - person Fadi; 08.07.2016