web-dev-qa-db-fra.com

Impossible de transmettre une image à Amazon ECR - échec avec "aucune information d'authentification de base"

J'essaie de transmettre une image de menu fixe à un registre Amazon ECR. J'utilise le client Docker Docker version 1.9.1, build a34a1d5. J'utilise "aws ecr get-login --region us-east-1" pour obtenir les informations de connexion du docker. Je me connecte ensuite avec succès à ces créanciers 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 lorsque j'essaie de pousser mon image, l'erreur suivante apparaît:

$ 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 disposait des autorisations appropriées. Je me suis également assuré que le référentiel autorisait cet utilisateur à y accéder. Juste pour m'assurer que cela n'était pas un problème, j'ai configuré le registre de manière à permettre à tous les utilisateurs un accès complet. Rien ne change l'erreur "pas d'authentification de base avec authentification". Je ne sais pas comment commencer à déboguer ceci car tout le trafic est crypté.

METTRE À JOUR

Alors j'ai eu un moment d'Homère Simpson D'Oh quand j'ai réalisé la cause fondamentale de mon problème. J'ai accès à plusieurs comptes AWS. Même si j'utilisais aws configure pour définir mes informations d'identification pour le compte sur lequel j'avais configuré mon référentiel, aws cli utilisait en fait les variables d'environnement AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY. Donc, quand j'ai eu 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 suppose que la devise de l'histoire est que si vous rencontrez cette erreur, assurez-vous que le référentiel auquel vous vous connectez correspond à la balise que vous avez appliquée à l'image.

117
Alec Rooney

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

80
Antonio Terreno

Dans mon cas, il s’agissait d’un bogue lié à Docker pour Windows et à leur prise en charge par Windows Credential Manager.

Ouvrez votre ~/.docker/config.json et supprimez l’entrée "credsStore": "wincred".

Cela entraînera que les informations d'identification soient écrites directement dans le config.json. Vous devrez vous connecter à nouveau par la suite.

Vous pouvez suivre ce bug grâce aux tickets # 22910 et # 24968 sur GitHub.

51
Der Hochstapler

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

37
Greg

J'ai eu ce problème aussi. Ce qui m'est arrivé, c’est que j’ai oublié de lancer la commande qui m’a été renvoyée après avoir exécuté 

aws ecr get-login --region ap-southeast-2

Cette commande a renvoyé un gros blob, qui inclut la commande docker login juste là! Je n'ai pas réalisé. 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 exécutez la commande Push de votre menu fixe qui ressemble à ceci:

docker Push 8888888.blah.blah.ap-southwest-1.amazonaws.com/dockerfilename
20
James111

Cela aurait dû fonctionner même sans ouvrir les autorisations. Voir la documentation: Authentification par registre privé .

[Edit: en fait, j’avais aussi des problèmes d’autorisations lors d’un deuxième test. Reportez-vous à Le transfert de Docker Push vers un référentiel privé AWS ECR échoue avec un JSON ) mal formé.]

Néanmoins, j'ai eu le même problème. Je ne sais pas pourquoi, mais j'ai utilisé avec succès le mécanisme d'authentification plus long décrit dans la documentation pour get-autorisation-token

AWS CLI et versions de Docker:

$ 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

Obtenez le jeton d'authentification ('mot de passe docker').

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. Je devais donc définir explicitement --region us-east-1.

Connectez-vous de manière interactive (remplacez ############ par votre identifiant 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>

Poussez une image (en supposant que vous ayez créé une image de menu fixe 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
fazy

Essayez avec:

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

avant de pousser.

11
MrMins

Si cela aide quelqu'un ...

Mon problème était que je devais utiliser l'option --profile afin de m'authentifier avec le profil approprié à partir du fichier d'informations d'identification.

Ensuite, j'avais omis la commande --region [region_name], qui donnait également l'erreur "pas d'authentification de base".

La solution pour moi était de changer ma commande de ceci:

aws ecr get-login

Pour ça:

aws --profile [profile_name] ecr get-login --region [region_name]

Exemple:

aws --profile foo ecr get-login --region us-east-1

J'espère que ça aide quelqu'un!

11
Lansana

Il existe un bogue connu dans le gestionnaire des informations d'identification Wincred sous Windows. Supprimer «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 .

8
Tom Rijntjes

J'ai vécu le même problème. 

La génération de nouvelles informations d'identification AWS (clés d'accès) et la reconfiguration de l'AWS CLI avec de nouvelles informations d'identification ont résolu le problème.

Auparavant, la commande de connexion de docker générée par aws ecr get-login --region us-east-1 avec une URL de registre EC non valide.

8
temasso

Dans mon cas, après avoir exécuté aws ecr get-login --no-include-email --region *****, je viens de copier le résultat de cette commande avec le format docker login -u *** -p ************ et vous le collez dans l'invite. La poussée a eu lieu.

4
Julien Nyambal

Les documents AWS vous indiquent d'exécuter la commande suivante (pour la région ap-south-2)

aws ecr get-login --region ap-southeast-2

Lorsque je me suis heurté à ce problème, il ne m’était pas clair, d’après cette documentation, que vous deviez saisir le résultat de cette commande dans le terminal et l’exécuter.

Correction qui fonctionnait pour moi était de copier le résultat dans le presse-papiers avec

aws ecr get-login --region ap-southeast-2 | pbcopy

Collez le résultat dans la ligne de commande et exécutez-le.

4
Dan Groch

Après avoir exécuté cette commande:

(aws ecr get-login --no-include-email --region us-west-2)

il suffit d’exécuter la commande docker login à partir de la sortie.

docker login -u AWS -p epJ....

est la manière dont docker se connecte à ECR

3
Javier Rodriguez

J'ai eu ce problème avec une cause différente: j'avais besoin de Push vers un registre non associé à mon compte AWS (registre ECR d'un client). Le client m'avait accordé l'accès sous l'onglet Autorisations pour le registre, en ajoutant mon ID IAM (par exemple, arn:aws:iam::{AWS ACCT #}:user/{Username}) en tant que 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

Ce qui a bien sûr abouti à no basic auth credentials. Il se trouve que , aws ecr get-login vous connecte à l’ECR pour le registre associé à votre login, ce qui a un sens rétrospect. La solution consiste à indiquer à aws ecr get-login le ou les registres auxquels vous souhaitez vous connecter.

$(aws ecr get-login --region us-west-2 --profile profilename --registry-ids {Client AWS ACCT #})

Après cela, docker Push fonctionne parfaitement.

2
Jason Clark

J'ai aussi rencontré ce problème sous OSX. J'ai vu la réponse d'Oliver Salzburg et vérifié mon ~/.docker/config.json. Il contenait plusieurs informations d'identification d'autorisation à partir des différents comptes AWS que j'ai. J'ai supprimé le fichier et après avoir exécuté get-login, cela a fonctionné.

1
Minh Tran

Mon problème était d'avoir plusieurs informations d'identification AWS; défaut et dev. Depuis que j'essayais de me déployer, cela fonctionnait:

$(aws ecr get-login --no-include-email --region eu-west-1 --profile dev | sed 's|https://||')
1
hfogel

Sur Windows dans PowerShell , utilisez:

Invoke-Expression $(aws ecr get-login --no-include-email)
1
Igor Akkerman

J'ai rencontré le même problème et l'erreur que j'ai commise a été d'utiliser le mauvais chemin de prise en pension

par exemple: docker Push xxxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/jenkins:latest

Dans le chemin ci-dessus, c'est là que j'ai commis l'erreur: Dans "dkr.ecr.us-east-1.amazonaws.com" au lieu de "west". J'utilisais "east". Une fois que j'ai corrigé mon erreur, j'étais capable de pousser l'image avec succès.

1
karthik vee

Si vous utilisez plusieurs profils et que vous devez vous connecter à un profil autre que celui par défaut, vous devez vous connecter avec cette commande:

$(AWS_PROFILE=<YOUR PROFILE> aws ecr get-login --no-include-email --region eu-west-1)
1
zlandorf

Exécutez simplement ce que vous avez retourné à la première étape pour résoudre le problème.

0
SmallChess

J'ajoute l'option de région et tout fonctionne alors bien pour moi:

aws ecr get-login --no-include-email --region eu-west-3
0
Pierre N

nous rencontrons également ce problème aujourd'hui et essayons tout ce qui est mentionné dans ce message (à l'exception de la génération d'informations d'identification AWS). 

Nous avons finalement résolu le problème en mettant simplement à niveau Docker, puis le Push a fonctionné. 

Le problème a été rencontré avec Docker 1.10.x et a été résolu avec Docker 1.11.x. 

J'espère que cela t'aides

0
Baptiste Gaillard

Assurez-vous que vous utilisez la bonne région dans aws ecr get-login, elle doit correspondre à la région dans laquelle votre référentiel est créé.

0
Lech Migdal

Ce message d'erreur provient de docker et il n'est pas nécessairement lié à AWS car j'ai la même erreur lorsque je n'utilise pas AWS ... cela signifie simplement que docker n'obtient pas l'autorisation de procéder à partir de la source d'authentification utilisée.

Dans mon cas, lors du test, j'ai supprimé le répertoire ~/.docker et j'ai eu cette erreur ... après avoir fait rebondir mon registre de docker local, alors le docker Push allait bien

0
Scott Stensland
aws ecr get-login --region us-west-1 --no-include-email

Cette commande me donne la commande correcte pour me connecter. Si vous n'utilisez pas "--no-include-email", une autre erreur sera générée. La sortie de la commande ci-dessus ressemble à cette connexion docker -u AWS -p *********************** très gros ****** Copiez cela et exécutez-le. Maintenant, il affichera "Login Succeeded". Vous pouvez maintenant transmettre votre image à ECR. 

Assurez-vous que votre règle AMI dispose des droits pour l'utilisateur que vous avez tenté de vous connecter. 

0
Omar Faroque Anik

Vous devez vous assurer que vous vous êtes connecté avec les informations d'identification correctes. Consultez la description de l'erreur officielle et vérifiez-la ici. 

http://docs.aws.Amazon.com/AmazonECR/latest/userguide/common-errors-docker.html

La fixation "pas d'authentification de base" est décrite dans le lien

0
suresh

La commande de docker donnée par aws-cli est un peu en retrait ...

Lors de l'utilisation de la connexion Docker, Docker enregistre une paire serveur: paire de clés dans votre trousseau ou dans le fichier ~/.docker/config.json. 

Si la clé est enregistrée sous " https://7272727.dkr.ecr.us-east-1.amazonaws.com ", la recherche de la clé lors du Push échouera car docker cherchera un serveur nommé 7272727.dkr.ecr.us-east-1.amazonaws.com ”not" https://7272727.dkr.ecr.us-east-1.amazonaws.com ".

Utilisez la commande suivante pour vous connecter: 
eval $ (aws ecr get-login --no-include-email --region us-east-1 --profil votre profil | sed 's | https: // || ')

Une fois que vous avez exécuté la commande, vous obtenez le message 'Login Succeeded' (Connexion réussie) 
après que votre commande Push devrait fonctionner

0
Dakshin

J'ai posté une réponse à cette question sur les forums Docker. Dans mon cas, le problème était que le "docker" centos n'était pas équivalent à Docker CE et a donc échoué avec:

pas d'authentification de base

J'ai simplement corrigé en installant "docker-ce" sur centos.

Référence: https://forums.docker.com/t/docker-Push-to-ecr-failing-with-no-basic-auth-credentials/17358/

0
scooter

La commande suivante fonctionne pour moi:

Sudo $(aws ecr get-login --region us-east-1 --no-include-email)

Et puis je lance ces commandes:

Sudo docker tag e9ae3c220b23(image_id) aws_account_id.dkr.ecr.region.amazonaws.com/my-web-app

Sudo docker Push aws_account_id.dkr.ecr.region.amazonaws.com/my-web-app
0
Chirag Kalal

Dans mon cas (et probablement dans tous les cas), cette erreur résultait de plusieurs comptes AWS. AWS ECR n'utilise donc pas les informations d'identification aws appropriées associées au compte aws.

J'ai essayé plusieurs solutions mentionnées ici, mais je n'y suis pas parvenu. Cela a fonctionné après l'utilisation de jetons au lieu du nom d'utilisateur et du mot de passe. Je l'ai fait en suivant les instructions ici. https://btburnett.com/2017/01/docker-login-for-Amazon-aws-ecr-using-windows-powershell.html

Si vous isolez des comptes AWS à des fins de CI/CD et disposez d'un référentiel ECR partagé entre plusieurs comptes AWS, vous devrez peut-être modifier le ~/.docker/config.json manuellement.

Disons que vous avez ces configurations:

  1. ECR appartient à AWS Account ID 00000000000000
  2. Le serveur CI appartient à l'ID de compte AWS 99999999999999

Si vous appelez aws ecr get-login --region us-west-2 | bash sur votre serveur CI, docker générera des informations d'identification temporaires dans ~/.docker/config.json.

{
  "auths": {
    "https://99999999999999.dkr.ecr.us-west-2.amazonaws.com": {
      "auth": "long-token.."
    }
  }
}

Mais vous voulez indiquer le compte de l'ECR, vous devez donc changer le nom d'hôte.

{
  "auths": {
    "https://00000000000000.dkr.ecr.us-west-2.amazonaws.com": {
      "auth": "long-token.."
    }
  }
}

Notez que cette situation dépend de la manière dont vous créez l'utilisateur/la stratégie IAM pour autoriser l'accès ECR.

0
tomodian