Ne peut pas pousser l'image à Amazon ECR-échoue avec " aucune authentification de base"
j'essaie de mettre une image de docker dans un registre de L'ECR en Amazonie. J'utilise docker client Docker version 1.9.1, construire a34a1d5. J'utilise "aws p. get-login --région us-east-1" pour obtenir le panneau de connexion creds. Je me connecte alors avec succès avec ces creds comme suit:
docker login -u AWS -p XXXX -e none https://####.dkr.ecr.us-east-1.amazonaws.com
WARNING: login credentials saved in /Users/ar/.docker/config.json
Login Succeeded
mais quand j'essaie de pousser mon image j'obtiens l'erreur suivante:
$ docker push ####.dkr.ecr.us-east-1.amazonaws.com/image:latest
The push refers to a repository [####.dkr.ecr.us-east-1.amazonaws.com/image] (len: 1)
bcff5e7e3c7c: Preparing
Post https://####.dkr.ecr.us-east-1.amazonaws.com/v2/image/blobs/uploads/: no basic auth credentials
je me suis assuré que l'utilisateur aws avait les bonnes permissions. Je me suis aussi assuré que le dépôt a permis à cet utilisateur d'y pousser. Juste pour être sûr que ce n'était pas un problème, j'ai mis le Registre pour permettre à tous les utilisateurs un accès complet. Rien ne change "pas de base d'authentification des informations d'identification d'erreur". Je ne sais pas comment déboguer ceci puisque tout le trafic est crypté.
mise à JOUR
ainsi J'ai eu un peu de Homer Simpson d'Oh moment quand j'ai réalisé la cause profonde de mon problème. J'ai accès à plusieurs AWS compte. Même si j'utilisais aws configure pour définir mes identifiants pour le compte où j'avais configuré mon dépôt, aws cli utilisait en fait les variables D'environnement AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY. Donc quand j'ai fait aws ecr get-login il retournait un login pour le mauvais compte. Je n'ai pas remarqué que les numéros de Compte étaient différents jusqu'à ce que je revienne maintenant pour essayer certaines des réponses proposées. Lorsque je supprime les variables d'environnement tout fonctionne correctement. Je deviner la devise de l'histoire est que si vous frappez cette erreur, assurez-vous que le référentiel de vous connecter correspond à la balise que vous avez appliqué à l'image.
23 réponses
si vous l'exécutez $(aws ecr get-login --region us-east-1)
il sera fait pour vous
dans mon cas, il s'agissait d'un bug avec Docker pour Windows et leur support pour le Gestionnaire de justificatifs D'identité Windows.
ouvrez votre ~/.docker/config.json
et supprimez l'entrée "credsStore": "wincred"
.
cela fera que les lettres de créance seront écrites directement au config.json
. Vous devrez vous connecter à nouveau après.
vous pouvez suivre ce bug à travers les billets #22910 et #24968 sur GitHub.
Si vous utilisez des profils, n'oubliez pas de passer --profile=XXX
à aws ecr get-login
.
j'ai eu ce problème aussi. Ce qui s'est passé avec moi, c'est que j'ai oublié d'exécuter la commande qui m'a été rendue après que j'ai couru
aws ecr get-login --region ap-southeast-2
cette commande renvoie un gros blob, qui inclut la commande docker login
juste là! Je n'avais pas conscience. Il devrait retourner quelque chose comme ceci:
docker login -u AWS -p <your_token_which_is_massive> -e none <your_aws_url>
copiez et collez cette commande puis lancez votre commande push docker qui ressemble à quelque chose comme ceci:
docker push 8888888.blah.blah.ap-southwest-1.amazonaws.com/dockerfilename
cela aurait dû fonctionner même sans ouvrir les permissions. Voir la documentation: Privé Registre d'Authentification .
[Edit: en fait, j'ai eu des problèmes de permissions aussi en faisant un second test. Voir Docker pousser à AWS P. privé des pensions de défaut malformé JSON ).]
néanmoins j'ai eu le même problème; Je ne sais pas pourquoi, mais j'ai utilisé avec succès le plus long-winded auth mécanisme décrit dans la documentation get-autorisation-jeton
AWS CLI and Docker versions:
$ aws --version
aws-cli/1.9.17 Python/2.7.6 Linux/3.16.0-38-generic botocore/1.3.17
$ docker --version
Docker version 1.9.1, build a34a1d5
Obtenir le jeton d'authentification ('menu fixe le mot de passe').
aws ecr get-authorization-token --region us-east-1 --output text \
--query authorizationData[].authorizationToken | base64 -d | cut -d: -f2
Remarque: Mon ~/.aws / config spécifie une région par défaut différente, donc j'ai dû explicitement définir --region us-east-1
.
ouvrez une session interactive (changez ############
à votre id de compte AWS):
docker login -u AWS https://############.dkr.ecr.us-east-1.amazonaws.com/
password: <paste the very long password from above>
email: <I left this blank>
Pousser une image (en supposant que vous avez fait une image docker test
):
docker tag test:latest ############.dkr.ecr.us-east-1.amazonaws.com/test:latest
docker push ############.dkr.ecr.us-east-1.amazonaws.com/test:latest
The push refers to a repository [910732017890.dkr.ecr.us-east-1.amazonaws.com/test] (len: 1)
d5122f58a2e1: Pushed
7bddbca3b908: Pushed
latest: digest: sha256:bc0b521fd398bd1a2ef58a289dcb910334608723fd570e7bddb36eacd0060363 size: 4378
si ça peut aider quelqu'un...
mon problème était que je devais utiliser l'option --profile
afin de m'authentifier avec le bon profil à partir du fichier de justificatifs d'identité.
ensuite, j'ai lancé la commande --region [region_name]
, qui a aussi donné l'erreur" no basic authentic credentials".
la solution pour moi était de changer ma commande de ceci:
aws ecr get-login
à ceci:
aws --profile [profile_name] ecr get-login --region [region_name]
exemple:
aws --profile foo ecr get-login --region us-east-1
Espère que ça aide quelqu'un!
Essayez avec:
eval $(aws ecr get-login --no-include-email | sed 's|https://||')
avant push.
il y a un bug connu dans le gestionnaire de justificatifs wincred sur Windows. La suppression de 'https: / /' de la commande de connexion générée résout ce problème.
docker login -u AWS -p <password> <aws_account_id>.dkr.ecr.<region>.amazonaws.com
au lieu de
docker login -u AWS -p <password> https://<aws_account_id>.dkr.ecr.<region>.amazonaws.com
Voir aussi la page de dépannage .
j'ai vécu le même problème.
la génération de nouveaux justificatifs D'identité AWS (clés d'accès) et la reconfiguration du CLI AWS avec de nouveaux justificatifs d'identité ont résolu le problème.
Earlier, aws ecr get-login --region us-east-1
commande de connexion générée par docker avec L'URL du registre ce invalide.
- assurez-vous d'avoir créé le registre ECR en premier.
Puis, selon les Instructions de commande Push ECR, couper et coller les commandes suivantes - exécute la commande login du docker (eval sur Mac / Linux passe à côté du cut-and-paste)
eval $(aws ecr get-login --region us-east-1)
ajouter -- profil si vous utilisez plusieurs comptes AWS
eval $(aws ecr get-login --region us-east-1 --profile your-profile)
-
docker build -t image-name .
-
docker tag image-name:latest ############.dkr.ecr.us-east-1.amazonaws.com/image-name:latest
-
docker push ############.dkr.ecr.us-east-1.amazonaws.com/image-name:latest
En cas d'erreur, assurez-vous d'exécuter toutes les commandes de nouveau! les justificatifs d'identité que vous obtenez en utilisant aws ecr get-login
sont temporaires et expireront.
les documents AWS vous disent d'exécuter la commande suivante (pour la région ap-Sud-Est-2)
aws ecr get-login --region ap-southeast-2
quand je suis tombé sur ce problème, il n'était pas clair pour moi basé sur ce docs que vous devez entrer le résultat de cette commande dans le terminal et l'exécuter.
Fixer qui a fonctionné pour moi était de copier le résultat au bloc-notes avec
aws ecr get-login --region ap-southeast-2 | pbcopy
Coller le résultat dans la ligne de commande et l'exécuter
dans mon cas, après avoir lancé aws ecr get-login --no-include-email --region *****
, je viens de copier la sortie de cette commande avec is du formulaire docker login -u *** -p ************
, et vous la collez dans l'invite. La poussée est allé de l'avant.
j'ai rencontré ce problème aussi bien sur OSX. J'ai vu la réponse D'Oliver Salzburg et j'ai vérifié mon ~/.menu fixe/config.json. Il y avait plusieurs autorisations à l'intérieur des différents comptes AWS que j'ai. J'ai supprimé le fichier et après avoir lancé get-login à nouveau, cela a fonctionné.
j'ai eu ce problème avec une cause différente: j'ai dû pousser vers un registre non associé à mon compte AWS (un registre ECR d'un client). Le client m'avait accordé l'accès sous l'onglet Permissions pour le registre, en ajoutant mon id IAM (e.g., arn:aws:iam::{AWS ACCT #}:user/{Username}
) comme Principal. J'ai essayé de me connecter avec les étapes habituelles:
$(aws ecr get-login --region us-west-2 --profile profilename)
docker push {Client AWS ACCT #}.dkr.ecr.us-west-1.amazonaws.com/imagename:latest
qui a bien sûr abouti à no basic auth credentials
. il s'avère Que , aws ecr get-login
vous connecte à la P pour le registre associé à votre login , ce qui a du sens rétrospectivement. La solution est de dire aws ecr get-login
registre(s) vous souhaitez vous connecter.
$(aws ecr get-login --region us-west-2 --profile profilename --registry-ids {Client AWS ACCT #})
après ça, docker push
fonctionne très bien.
nous rencontrons aussi cette question aujourd'hui et avons essayé tout ce qui est mentionné dans ce post (sauf générer des références AWS).
nous avons finalement résolu le problème en améliorant simplement Docker, puis la poussée a fonctionné.
le problème a été rencontré avec Docker 1.10.x et a été résolu avec Docker 1.11.x.
Espérons que cette aide
si vous isolez des comptes AWS à des fins de CI/CD et que vous avez un dépôt ECR partagé entre plusieurs comptes AWS, vous pourriez avoir besoin de changer le ~/.docker/config.json
manuellement.
disons que vous avez ces configurations:
- P est la propriété de ID de Compte AWS
00000000000000
- serveur CI est détenue par ID de Compte AWS
99999999999999
si vous appelez aws ecr get-login --region us-west-2 | bash
dans votre CI serveur, docker générera des justificatifs d'identité temporaires dans ~/.docker/config.json
.
{
"auths": {
"https://99999999999999.dkr.ecr.us-west-2.amazonaws.com": {
"auth": "long-token.."
}
}
}
mais vous voulez pointer vers le compte ECR, donc vous devez changer le nom d'hôte.
{
"auths": {
"https://00000000000000.dkr.ecr.us-west-2.amazonaws.com": {
"auth": "long-token.."
}
}
}
Note cette situation dépend de la façon dont vous formez IAM user / policy pour autoriser L'accès ECR.
vous devez vous assurer que vous vous êtes connecté en utilisant les informations d'identification correctes, voir la description d'erreur officielle et les vérifications ici
http://docs.aws.amazon.com/AmazonECR/latest/userguide/common-errors-docker.html
Fixation "pas de l'authentification de base" est décrit dans le lien
j'ai fait face au même problème et l'erreur que j'ai faite était d'utiliser le mauvais chemin de repos
par exemple: docker push xxxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/jenkins:latest
chemin c'est là que j'ai fait l'erreur: "dkr.ecr.us-east-1.amazonaws.com"
au lieu de "west"
. J'utilisais east"
. Une fois que j'ai corrigé mon erreur, j'ai pu pousser l'image avec succès.
assurez-vous d'utiliser la bonne région aws ecr get-login
, elle doit correspondre à la région dans laquelle votre référentiel est créé.
aws ecr get-login --region us-west-1 --no-include-email
cette commande me donne la commande correcte pour me connecter. Si vous n'avez pas utiliser "--ne-comprennent-mail",il va jeter une autre erreur. La sortie de la commande ci-dessus ressemble à ce panneau de connexion -u AWS -p **********************très grand******. Copie et de l'exécuter. Maintenant, il va afficher "Connexion Réussie". Maintenant, vous pouvez pousser votre image à ECR.
assurez-vous que votre règle AMI a la permission pour l'utilisateur que vous avez essayé de vous connecter.
exécutez simplement ce qui revient à l'étape un réglerait le problème.
ce message d'erreur vient de docker et il n'est pas nécessairement lié à AWS car j'ai eu la même erreur en n'utilisant pas AWS ... son juste dire docker n'est pas obtenir l'autorisation de procéder à partir de n'importe quelle source d'auth qu'il se trouve être en utilisant
dans mon cas, dans test j'ai supprimé le répertoire ~/.docker et j'ai eu cette erreur ... après que j'ai rebondi mon registre docker local puis Docker push était très bien
mon problème était d'avoir plusieurs justificatifs D'identité AWS; par défaut et dev. Depuis que j'ai essayé de déployer à dev cela a fonctionné:
$(aws ecr get-login --no-include-email --region eu-west-1 --profile dev | sed 's|https://||')