"Идентификатор авторизации истек" вопрос AWS-CLI на MacOS Sierra

Я пытаюсь нажать изображение докера в репозиторий AWS ECR, используя aws-cli.

  • Я просто запустил команду get-login
  • выполнить вывод (который возвращает login succeeded)
  • затем попытайтесь нажать изображение докера, тогда я получаю сообщение:
    denied: Your Authorization Token has expired. Please run 'aws ecr get-login' to fetch a new one.

Я не знаю, что происходит не так, я нажимаю на правильный репо, время на моем mac правильное. Раньше это работало, но поскольку я переустановил свой Mac и обновился до macOS Sierra, он больше не работает, поэтому, вероятно, это связано с этим.

Мой aws --version:

aws-cli/1.11.34 Python/2.7.10 Darwin/16.3.0 botocore/1.4.91

Полный вывод команд, которые я запускаю:

$ aws ecr get-login --region eu-west-1
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 https://1234567890.dkr.ecr.eu-west-1.amazonaws.com
Flag --email has been deprecated, will be removed in 1.13.
Login Succeeded
$ docker push 1234567890.dkr.ecr.eu-west-1.amazonaws.com/service-web:latest
The push refers to a repository [1234567890.dkr.ecr.eu-west-1.amazonaws.com/service-web]
c1f87971dfa9: Preparing 
2eb644aea3de: Preparing 
9c8843ffe48e: Preparing 
39bb58d049d4: Preparing 
f053bc969599: Preparing 
7169084246b8: Waiting 
bb134a1936fd: Waiting 
184e76848a1c: Waiting 
75c8fcf65748: Waiting 
eb9b9ee1ea58: Waiting 
f4bf35723edd: Waiting 
ddffe1a64b3c: Waiting 
fd1a1154db16: Waiting 
b542e946067a: Waiting 
d49ed2a5e1ed: Waiting 
bb39b980367a: Waiting 
25b8358d062f: Waiting 
997eee521fc7: Waiting 
50b5447183a8: Waiting 
4339b5cb0e1d: Waiting 
3dbd4a53b21b: Waiting 
2bec16216500: Waiting 
b9fd8e264df6: Waiting 
b6ca02dfe5e6: Waiting 
denied: Your Authorization Token has expired. Please run 'aws ecr get-login' to fetch a new one.

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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

Таким образом, в команде blob возвращается 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:// должно заставить докер работать пока.

Ответ 4

Вам необходимо обновить токен авторизации каждые 12 часов:

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

Ответ 5

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

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

aws ecr get-login --region eu-west-1 -p <yourprofilename>

Ответ 6

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

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

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

Ответ 7

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

Удалите "https://", а затем запустите команду в качестве входа в docker -u AWS -p xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx == youraccountid.dkr.ecr.ap-southeast-1.amazonaws.com

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

Ответ 8

Мне повезло с использованием 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)

Работала.

Ответ 9

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

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

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

Ответ 10

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

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

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

Ответ 11

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

Ответ 12

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

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

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

2) Скопируйте и вставьте указанную выше строку (возможно, -e никто не будет работать, поэтому удалите ее тоже). На выходе появится предупреждение, за которым следует успех: ПРЕДУПРЕЖДЕНИЕ! Использование соглашения -p через CLI небезопасно. Использовать - -p assword-stdin Login Succeeded

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

3) Теперь вы можете безопасно нажать изображение -docker нажмите xxxxxxx.dkr.ecr.us -e ast-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.

Ответ 13

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

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

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

Ответ 14

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

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

eval $ (aws ecr get-login --region eu-west-1 --profile)