Вход AWS ECR с JavaScript SDK --no-include-email flag

70
5

Я пытаюсь запустить команду AWS CLI:

aws ecr get-login --no-include-email --region <my-region>

Но используя JavaScript SDK с new AWS.ECR(..).getAuthorizationToken но я получаю эту ошибку:

Error response from daemon: login attempt to https://xxxxx.dkr.ecr.<my-region>.amazonaws.com/v2/failed with status: 400 Bad Request

По моему мнению, мне нужно использовать некоторый флаг, равный аргументу --no-include-email в команде CLI, но я не могу найти, как установить его с помощью JavaScript SDK.

Это мой код:

const ecr = new AWS.ECR({
apiVersion: '2015-09-21',
region: 'my-region'
});

const { authorizationData } = await ecr.getAuthorizationToken().promise();

if(!authorizationData || !authorizationData[0] || !authorizationData[0].authorizationToken){
throw new Error('AWS getAuthorizationToken failed');
}

const password = authorizationData[0].authorizationToken;
const proxyEndpoint = authorizationData[0].proxyEndpoint;

await childProcessP.spawn('docker', [
'login',
'-u', 'AWS',
'-p', password,
proxyEndpoint
]);

Кто-нибудь знает, как это сделать?

спросил(а) 2018-05-06T21:27:00+03:00 2 года, 5 месяцев назад
1
Решение
81

Я столкнулся с той же проблемой при использовании скрипта bash. И я нашел это решение

ответил(а) 2019-02-06T06:28:00+03:00 1 год, 8 месяцев назад
41

AuthorizationToken содержит base64 закодированное <username>:<password>


все, что вам нужно сделать, это декодировать и разбивать, чтобы получить нужные значения.

ответил(а) 2018-08-22T23:51:00+03:00 2 года, 2 месяца назад
41

У меня такая же проблема, используя (golang) docker ENGINE библиотеки.

Сначала я получаю учетные данные (например, вы) из ecr.GetAuthorizationToken() Затем я вызываю docker.RegistryLogin().

Вот мой код:

authToken, err  := ecrSession.GetAuthorizationToken(&ecr.GetAuthorizationTokenInput{})
if err != nil {
color.Red(fmt.Sprintf("Getting ECR auth token: %s", err.Error()))
return err
}

auth := types.AuthConfig{
Username: "AWS",
Password: *authToken.AuthorizationData[0].AuthorizationToken,
ServerAddress: *authToken.AuthorizationData[0].ProxyEndpoint,

}

authenticatedOK, err := cli.RegistryLogin(ctx, auth)

всегда возвращай мне 400 плохих запросов.

Однако, запустив команды из оболочки:

aws ecr get-login --no-include-email --region eu-west-1

затем скопируйте вставку возвращаемого вывода

docker login -u AWS -p... http://account-id.dkr.ecr.eu-west-1.amazonaws.com работает отлично.

ответил(а) 2018-05-08T18:18:00+03:00 2 года, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема