Ответ 1
Ни один из вышеперечисленных решений не работал для меня, но я обнаружил, что когда я установил область в команде входа ecr, она сработала.
aws ecr get-login --region us-west-2
Я пытаюсь нажать изображение докера в репозиторий 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.
Ни один из вышеперечисленных решений не работал для меня, но я обнаружил, что когда я установил область в команде входа ecr, она сработала.
aws ecr get-login --region us-west-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
В последних версиях 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://
должно заставить докер работать пока.
Вам необходимо обновить токен авторизации каждые 12 часов:
$(aws ecr get-login --no-include-email --region us-east-1)
- изменить регион в соответствии с вашей конфигурацией
Вы также получите сообщение "Ваш токен авторизации истек", если в ~/.aws/credentials указано несколько путей (путь зависит от вашей ОС), и вы забыли добавить флаг --p.
Используйте эту команду, чтобы получить логин:
aws ecr get-login --region eu-west-1 -p <yourprofilename>
Только что возникла та же проблема в 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
.
Я также получаю ту же ошибку, ниже решение, которое я пробовал, и оно работает: 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
И он будет работать, и вы сможете нажать изображение.
Мне повезло с использованием 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)
Работала.
Я использовал стабильную версию docker для mac Version 1.12
Я только что обновил версию бета-версии Version 1.13.0-rc4-beta34.1 (14853)
и теперь все работает по назначению.
Поэтому, если есть люди с одинаковой проблемой, убедитесь, что вы используете докер для mac версии 1.13 или выше, если версия 1.13 еще не выпущена, переключитесь на бета-версию.
В моем случае проблема была несколько учетных данных в ~/.aws/credentails, поэтому я использовал --profile
aws ecr get-login --no-include-email --region us-east-2 --profile xxxx
Это сработало для меня.
Это произошло, когда я пытался вытащить/извлечь из реестра другую учетную запись AWS. Мне нужно было запустить get-login
с --registry-ids
, передав идентификатор реестра, в который я хотел войти.
Я знаю, что сообщение связано с 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.
Предупреждение: aws ecr get-login
не подключается к серверам AWS и, похоже, работает, даже если у вас есть плохой доступ к AWS/секретным ключам или даже если вы забыли ввести ваши AWS-ключи доступа/секретные ключи в качестве переменных окружения.
Он по-прежнему с удовольствием предоставит вам длинный пароль без ошибок. Сообщение, которое вы получаете от AWS, - это ошибка срока действия, а не более правильная и полезная "авторизация неверная".
Примечание. Использование aws-cli версии 1.11.112.
Проблема заключается в том, что команда aws ecr get-login извлекает токен, действительный для указанного реестра в течение 12 часов, а затем печатает команду входа в докер с этим токеном авторизации, и мы не выполняем эту команду, которую получаем обратно.
Нам нужно выполнить эту напечатанную команду, чтобы войти в ваш реестр с помощью Docker. В моем случае я использую eval для выполнения напечатанной команды, которую я получаю от aws ecr get-login, например так:
eval $ (aws ecr get-login --region eu-west-1 --profile)