`Авторизационный токен истек` Выпуск AWS-CLI на MacOS Sierra

NSArray *assorted = [@"1 2 3 9 ; : 구 , 결 A B C Z ! á" componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSArray *sorted = [assorted sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    /* NSOrderedAscending, NSOrderedSame, NSOrderedDescending */
    BOOL isPunct1 = [[NSCharacterSet punctuationCharacterSet] characterIsMember:[(NSString*)obj1 characterAtIndex:0]];
    BOOL isPunct2 = [[NSCharacterSet punctuationCharacterSet] characterIsMember:[(NSString*)obj2 characterAtIndex:0]];
    if (isPunct1 && !isPunct2) {
        return NSOrderedAscending;
    } else if (!isPunct1 && isPunct2) {
        return NSOrderedDescending;
    }
    return [(NSString*)obj1 compare:obj2 options:NSDiacriticInsensitiveSearch|NSCaseInsensitiveSearch|NSNumericSearch]|;         
}];
29
задан Ludo - Off the record 29 December 2016 в 12:32
поделиться

14 ответов

Мне повезло, используя eval. Например,

$ aws ecr get-login --region us-east-1 --no-include-email --profile username_env 

не работает.

$ eval $(aws ecr get-login --region us-east-1 --no-include-email --profile username_env)

Работал.

2
ответ дан Ryan Dahlke 29 December 2016 в 12:32
поделиться

Ни одно из приведенных выше решений не сработало для меня, но я обнаружил, что когда я установил регион в команде ecr login, это сработало.

aws ecr get-login --region us-west-2

27
ответ дан Kamil Wojcik 29 December 2016 в 12:32
поделиться

Проблема заключается в том, что команда aws ecr get-login извлекает токен, действительный для указанного реестра в течение 12 часов, а затем печатает команду входа в Docker с этим токеном авторизации, и мы не выполняем полученную нами команду назад.

Нам нужно выполнить эту напечатанную команду, чтобы войти в ваш реестр с помощью Docker. В моем случае я использую eval для выполнения напечатанной команды, которую я получаю из aws ecr get-login, например:

eval $ (aws ecr get-login --region eu-west-1 - -профиль)

0
ответ дан umenon 29 December 2016 в 12:32
поделиться

Это произошло, когда я пытался вытолкнуть / извлечь данные из реестра в другой учетной записи AWS. Мне нужно было запустить get-login с флагом --registry-ids, передав идентификатор реестра, в который я хотел войти.

0
ответ дан spiffytech 29 December 2016 в 12:32
поделиться

В моем случае проблема заключалась в нескольких учетных данных в ~ / .aws / учетные данные. Я использую --profile

aws ecr get-login --no-include-email --region us-east-2 --profile xxxx

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

1
ответ дан Chetan kapoor 29 December 2016 в 12:32
поделиться

Предупреждение: aws ecr get-login не отображается для подключения к серверам AWS и работает, даже если у вас плохой доступ к секретным ключам AWS или даже если вы забыли ввести свои секретные ключи доступа AWS в качестве переменных среды.

Он по-прежнему с радостью предоставит вам длинный пароль без ошибки. Таким образом, сообщение, полученное от AWS, является ошибкой истечения срока действия вместо более правильной и полезной «неверной авторизации».

Примечание. Использование версии 1.11.112 aws-cli.

1
ответ дан Mike Biglan 29 December 2016 в 12:32
поделиться

Только что возникла такая же проблема в Linux Mint 18.1 (Ubuntu 16.04) с AWS ECR и последней версией Docker 17.06.1-ce, используемой в последнем клиенте Python Docker 2.5.1. Вход в систему сработал, нажать не удалось.

Удаление ~/.docker/config.json помогло. Он содержал только, вероятно, устаревший токен авторизации.

Я не думаю, что это как-то связано с операционной системой. В моем случае это работало ранее, и единственное изменение, которое я могу вспомнить, - это обновление с репо Ubuntu docker.io 1.12 до репо Docker docker-ce 17.06.

5
ответ дан saaj 29 December 2016 в 12:32
поделиться

Вам необходимо обновлять свой токен авторизации каждые 12 часов, попробуйте:

$(aws ecr get-login --no-include-email --region us-east-1) - изменить регион в соответствии с вашей конфигурацией

4
ответ дан zooblin 29 December 2016 в 12:32
поделиться

Возможно, вы просто запускаете команду и не вставляете команду, которая выводится из этой команды, обратно в терминал. Легкая ошибка, чтобы сделать. Как только вы запустите:

aws ecr get-login --no-include-email --region us-east-1

Он напечатает другую команду для запуска, вам нужно будет скопировать эту команду и запустить ее в своем терминале для полной аутентификации.

Или крутой способ - просто передать команду echo'd обратно в оболочку с помощью:
aws ecr get-login --no-include-email --region us-east-1 | sh

20
ответ дан Dakota Hipp 29 December 2016 в 12:32
поделиться

Последние версии Docker используют новую функцию хранения учетных данных, в которой есть ошибка , при которой выполнение docker login с URL-адресом, который указывает протокол, приведет к ошибкам истечения срока действия токена. Эта проблема будет исправлена ​​в Docker 1.13.

В настоящее время обходной путь заключается в выполнении ваших команд входа в систему без указания протокола.

Таким образом, в блоке команд, возвращаемом aws ecr get-login:

docker login -u AWS -p AQECAHh....b6Wk -e none https://1234567890.dkr.ecr.eu-west-1.amazonaws.com

Должен быть заменен следующим:

docker login -u AWS -p AQECAHh....b6Wk -e none 1234567890.dkr.ecr.eu-west-1.amazonaws.com

Пропуск https:// должен заставить докер работать на время будучи.

19
ответ дан wkl 29 December 2016 в 12:32
поделиться

Я знаю, что сообщение связано с MacOS Sierra, но для тех, у кого проблема в Windows, я выполнил следующее:

1) aws ecr get-login, эта команда выведет длинную строку

вход в докер -u AWS -p eyJwYXlsb2FkIjoiUXBnQ2FTV1B6Q1JqZGlH ..... . (пропущена вся строка для лучшего понимания) -e нет https: // xxxxxxx.dkr.ecr.us-east-1.amazonaws.com .

2) Скопируйте и вставьте вышеприведенную строку (возможно, -e ничего не получится, поэтому удалите ее тоже) . Вывод будет отображать предупреждение с последующим успехом: ВНИМАНИЕ! Использование --password через CLI небезопасно. Используйте --password-stdin. Вход выполнен успешно

Если вам нужен безопасный способ, используйте --password-stdin

3) Теперь вы можете безопасно нажать image -docker push xxxxxxx.dkr.ecr.us-east-1.amazonaws.com/ecfs-test

0429f33dd264: Pushed
48accfb13167: Pushed
f3bb6dd29c05: Pushed
e58ae65fa4eb: Pushed
3c6037fae296: Pushed
3efd1f7c01f6: Pushed
73b4683e66e8: Pushed
ee60293db08f: Pushed
9dc188d975fd: Pushed
58bcc73dcf40: Pushed
latest: digest: sha256:4354d137733c98a1bc8609d2d2f8e97316373904e size: 2404

Может быть, это решение будет работать и на Mac.

0
ответ дан hlopezvg 29 December 2016 в 12:32
поделиться

Я использовал стабильную версию Docker для Mac Version 1.12

Я только что обновился до бета-версии Version 1.13.0-rc4-beta34.1 (14853), и теперь все работает как задумано.

Поэтому, если есть люди с такой же проблемой, убедитесь, что вы используете Docker для Mac версии 1.13 или выше, если 1.13 еще не выпущен, переключитесь на бета-версию.

1
ответ дан Ludo - Off the record 29 December 2016 в 12:32
поделиться

Вы также получаете сообщение «Срок действия вашего токена авторизации истек», если у вас есть несколько учетных данных в ~ / .aws / credentials (путь зависит от вашей ОС), и вы забыли добавить флаг --p.

Используйте эту команду для получения логина:

aws ecr get-login --region eu-west-1 --p <yourprofilename>
5
ответ дан Nik 29 December 2016 в 12:32
поделиться

Я также получал ту же ошибку, ниже приведено решение, которое я пробовал, и оно работает: 1. Запустите команду: aws ecr get-login --no-include-email --region ap-southeast-1 (изменить регион в соответствии с вашим хранилищем) 2. вы получите что-то вроде: вход в докер -u AWS -p xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx == https://youraccountid.dkr.ecr.ap-southeast-1.amazonaws.com

Удалите «https: //», а затем выполните команду от имени входа в докер -u AWS -p xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx == youraccountid.dkr.ecr.ap-southeast-1.amazonaws.com

И это сработает, и вы сможете нажать на изображение.

2
ответ дан rakhim 29 December 2016 в 12:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: