J'essaie de transférer une image de menu fixe dans le référentiel AWS ECR à l'aide de l'aws-cli.
get-login
login succeeded
) denied: Your Authorization Token has expired. Please run
'aws ecr get-login' to fetch a new one.
Je ne sais pas ce qui ne va pas, je pousse vers le bon repo, le temps sur mon mac est correct. Cela fonctionnait auparavant, mais depuis que j'ai réinstallé mon mac et mis à niveau vers macOS Sierra, il ne fonctionne plus, donc probablement lié à cela.
Ma sortie aws --version
:
aws-cli/1.11.34 Python/2.7.10 Darwin/16.3.0 botocore/1.4.91
La sortie complète des commandes que je lance:
$ 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.
Aucune des solutions ci-dessus ne fonctionnait pour moi, mais j'ai constaté que lorsque je définissais une région dans la commande ecr login, cela fonctionnait.
aws ecr get-login --region us-west-2
Les dernières versions de Docker utilisent une nouvelle fonctionnalité de stockage des informations d'identification qui a un bogue où exécuter un docker login
avec une URL spécifiant un protocole entraîne des erreurs d'expiration du jeton. Ce problème sera corrigé dans Docker 1.13.
Pour le moment, la solution consiste à exécuter vos commandes de connexion sans spécifier le protocole.
Donc, dans la commande blob renvoyée par aws ecr get-login
:
docker login -u AWS -p AQECAHh....b6Wk -e none https://1234567890.dkr.ecr.eu-west-1.amazonaws.com
Devrait être remplacé par ceci:
docker login -u AWS -p AQECAHh....b6Wk -e none 1234567890.dkr.ecr.eu-west-1.amazonaws.com
Si vous omettez le https://
, le menu fixe doit fonctionner pour le moment.
Vous pouvez simplement exécuter la commande et ne pas coller la commande renvoyée par cette commande dans le terminal. Erreur facile à faire. Une fois que vous courez:
aws ecr get-login --no-include-email --region us-east-1
Il va imprimer une autre commande à exécuter, vous devrez copier cette commande et l'exécuter dans votre terminal pour vous authentifier complètement.
Ou un raccourci intéressant consiste simplement à rediriger la commande echo'd vers le shell avec:aws ecr get-login --no-include-email --region us-east-1 | sh
Je viens d'avoir le même problème sous Linux Mint 18.1 (Ubuntu 16.04) avec AWS ECR et le dernier Docker 17.06.1-ce utilisé via le dernier client Python Docker 2.5.1. La connexion a fonctionné, le push a échoué.
Enlèvement de ~/.docker/config.json
aidé. Il ne contenait que, probablement obsolète, un jeton d'autorisation.
Je ne pense pas que cela a quelque chose à voir avec le système d'exploitation sous-jacent. Dans mon cas, cela fonctionnait auparavant et le seul changement dont je me souvienne est la mise à niveau du docker.io 1.12
du référentiel d'Ubuntu au docker-ce 17.06
du référentiel de Docker.
Vous obtenez également le message "Votre jeton d'autorisation a expiré" si vous avez plus d'un identifiant dans ~/.aws/credentials (chemin dépendant de votre système d'exploitation) et oubliez d'ajouter l'indicateur --p.
Utilisez cette commande pour vous connecter:
aws ecr get-login --region eu-west-1 --p <yourprofilename>
Vous devez actualiser votre jeton d'autorisation toutes les 12 heures. Essayez:
$(aws ecr get-login --no-include-email --region us-east-1)
- change de région en fonction de votre configuration
J'ai eu de la chance en utilisant eval. Par exemple,
$ aws ecr get-login --region us-east-1 --no-include-email --profile username_env
N'a pas fonctionné.
$ eval $(aws ecr get-login --region us-east-1 --no-include-email --profile username_env)
A travaillé.
J'utilisais la version stable de docker pour mac Version 1.12
Je viens de passer à la version bêta de la version Version 1.13.0-rc4-beta34.1 (14853)
.__ et tout fonctionne comme prévu.
Donc, s'il y a des personnes qui ont le même problème, assurez-vous d'utiliser Docker pour Mac version 1.13 ou supérieure, si la version 1.13 n'est pas encore sortie, passez à la version bêta.
Dans mon cas, le problème était lié aux informations d'identification multiples dans ~/.aws/credentials. J'ai donc utilisé --profile.
aws ecr get-login --no-include-email --region us-east-2 --profile xxxx
Cela a fonctionné pour moi.
Cela s'est produit lorsque j'essayais de transférer/extraire un registre d'un autre compte AWS. Je devais exécuter get-login
avec l'indicateur --registry-ids
, en transmettant l'ID du registre auquel je voulais me connecter.
Avertissement: aws ecr get-login
ne semble pas se connecter aux serveurs AWS et semble fonctionner même si vos clés d'accès/secrètes AWS sont incorrectes ou même si vous avez oublié d'entrer vos clés d'accès/secrètes AWS en tant que variables d'environnement.
Il vous donnera toujours un mot de passe long sans fournir d'erreur. Le message que vous recevez d'AWS est une erreur d'expiration au lieu d'une "autorisation incorrecte" plus correcte et plus utile.
Remarque: Utilisation de la version 1.11.112 de aws-cli.
Je sais que le poste est lié à MacOS Sierra, mais pour ceux qui ont le problème sous Windows, j’ai effectué les opérations suivantes:
1) aws ecr get-login, cette commande affichera une longue chaîne
connexion docker -u AWS -p eyJwYXlsb2FkIjoiUXBnQ2FTV1B6Q1JqZGlH ...... (Omis la ligne entière pour une meilleure compréhension) -e none https: //xxxxxx.dkr.ecr.ecr.us-east-1. amazonaws.com .
2) Copiez et collez la ligne ci-dessus (peut-être que -e ne fonctionnera pas, supprimez-la aussi)}. La sortie affichera un avertissement suivi d'un succès: AVERTISSEMENT! L'utilisation de --password via la CLI n'est pas sécurisée. Utilisez --password-stdin Login Succeeded
Si vous devez utiliser un moyen sécurisé, utilisez le --password-stdin
3) Maintenant, vous pouvez pousser l'image en toute sécurité - docker Appuyez sur 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
Peut-être que cette solution fonctionnera aussi sur Mac.
Le problème vient du fait que la commande aws ecr get-login récupère un jeton valide pendant 12 heures pour un registre spécifié, puis imprime une commande de connexion docker avec ce jeton d'autorisation et que nous n'exécutons pas cette commande.
Nous devons exécuter cette commande imprimée pour vous connecter à votre registre avec Docker. Dans mon cas, j'utilise eval pour exécuter la commande imprimée que je reçois depuis aws ecr get-login comme ceci:
eval $ (aws ecr get-login --region eu-west-1 --profile)