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.

108
demandé sur AnkitG 2016-01-09 06:38:41

23 réponses

si vous l'exécutez $(aws ecr get-login --region us-east-1) il sera fait pour vous

75
répondu Antonio Terreno 2016-01-28 12:04:45

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.

50
répondu Der Hochstapler 2016-09-06 09:02:43

Si vous utilisez des profils, n'oubliez pas de passer --profile=XXX à aws ecr get-login .

34
répondu Greg 2018-06-25 14:30:40

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
19
répondu James111 2016-11-02 00:37:29

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
14
répondu fazy 2017-05-23 12:02:51

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!

11
répondu Lansana 2017-06-28 13:19:04

Essayez avec:

eval $(aws ecr get-login --no-include-email | sed 's|https://||')

avant push.

10
répondu MrMins 2017-10-03 01:40:39

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 .

6
répondu Tom Rijntjes 2017-06-30 08:53:03

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.

6
répondu temasso 2018-06-25 14:36:27
  1. assurez-vous d'avoir créé le registre ECR en premier.

    Puis, selon les Instructions de commande Push ECR, couper et coller les commandes suivantes
  2. 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)
  3. docker build -t image-name .
  4. docker tag image-name:latest ############.dkr.ecr.us-east-1.amazonaws.com/image-name:latest
  5. 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.

5
répondu Jason 2017-01-03 05:06:34

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

4
répondu Dan Groch 2016-09-29 23:52:51

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.

4
répondu Julien Nyambal 2018-07-11 13:58:22

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é.

1
répondu Minh Tran 2016-08-22 05:39:39

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.

1
répondu Jason Clark 2016-10-19 15:45:36

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

0
répondu Baptiste Gaillard 2016-07-06 10:46:33

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:

  1. P est la propriété de ID de Compte AWS 00000000000000
  2. 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.

0
répondu tomodian 2016-11-12 05:20:51

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

0
répondu suresh 2016-12-19 07:26:51

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.

0
répondu karthik vee 2017-01-04 13:13:21

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éé.

0
répondu Lech Migdal 2017-08-02 10:50:32
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.

0
répondu Omar Faroque Anik 2017-09-06 21:18:37

exécutez simplement ce qui revient à l'étape un réglerait le problème.

0
répondu SmallChess 2017-11-05 06:33:09

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

0
répondu Scott Stensland 2017-11-29 03:13:25

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://||')
0
répondu hfogel 2018-09-27 10:51:05