J'essaie de pousser une image docker dans 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 crédits de connexion docker. Ensuite, je me connecte avec succès avec ces crédits 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'essaye 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 autorisations appropriées. Je me suis également assuré que le référentiel permettait à cet utilisateur d'y accéder. Juste pour m'assurer que ce n'était pas un problème, j'ai configuré le registre pour permettre à tous les utilisateurs un accès complet. Rien ne change l' "no basic auth credentials"
erreur. Je ne sais pas comment commencer à déboguer cela car tout le trafic est crypté.
METTRE À JOUR
J'ai donc eu un peu d'Homer Simpson D'Oh au moment où j'ai réalisé la cause profonde 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 je l'ai fait, aws ecr get-login
cela retournait un identifiant 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.
la source
Réponses:
si tu cours
$(aws ecr get-login --region us-east-1)
tout sera fait pour vousla source
docker login
commande sera exécutée.Dans mon cas, il s'agissait d'un bogue avec Docker pour Windows et leur prise en charge de Windows Credential Manager.
Ouvrez votre
~/.docker/config.json
et supprimez l'"credsStore": "wincred"
entrée.Cela entraînera l'écriture des informations d'identification
config.json
directement dans le. Vous devrez ensuite vous reconnecter.Vous pouvez suivre ce bug via les tickets # 22910 et # 24968 sur GitHub.
la source
~/.docker
signifie.docker
dans votre répertoire personnel. Essayer%HOMEDRIVE%%HOMEPATH%\.docker
Si vous utilisez des profils, n'oubliez pas de passer
--profile=XXX
àaws ecr get-login
.la source
J'ai eu ce problème aussi. Ce qui m'est arrivé, c'est que j'ai oublié d'exécuter la commande qui m'a été renvoyée après avoir couru
Cette commande a renvoyé un gros blob, qui inclut la
docker login
commande juste là! Je n'ai pas réalisé. Il devrait renvoyer quelque chose comme ceci:Copiez et collez cette commande, puis exécutez votre commande push docker qui ressemble à ceci:
la source
Cela aurait dû fonctionner même sans ouvrir les autorisations. Voir la documentation: Authentification du registre privé .
[Edit: en fait, j'ai aussi eu des problèmes d'autorisations lors d'un deuxième test. Consultez Docker push to AWS ECR private repo failing with malformed JSON ).]
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 obtenir-autorisation-jeton
Versions de l'AWS CLI et de Docker:
Obtenez le jeton d'authentification ('docker password').
Remarque: Mon ~ / .aws / config spécifie une région par défaut différente, j'ai donc dû définir explicitement
--region us-east-1
.Connectez-vous de manière interactive (modifiez
############
votre identifiant de compte AWS):Poussez une image (en supposant que vous ayez créé une image docker
test
):la source
aws ecr get-authorization-token > config.json
puis l' ouvrir dans votre éditeur de texte favori pour copier et coller à volontéEssayez avec:
avant de pousser.
la source
no basic auth credentials Invalid IPv6 URL
Mettre à jour
Depuis AWS CLI version 2 -
aws ecr get-login
est obsolète et la méthode correcte estaws ecr get-login-password
.Par conséquent, la réponse correcte et mise à jour est la suivante:
docker login -u AWS -p $(aws ecr get-login-password --region us-east-1) xxxxxxxx.dkr.ecr.us-east-1.amazonaws.com
la source
unknown flag: --region
Si cela aide quelqu'un ...
Mon problème était que je devais utiliser l'
--profile
option afin de m'authentifier avec le profil approprié du fichier d'informations d'identification.Ensuite, j'avais omis la
--region [region_name]
commande, qui a également donné l'erreur "pas d'informations d'identification d'authentification de base".La solution pour moi était de changer ma commande à partir 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 cela aide quelqu'un!
la source
AWS_PROFILE=myprofile aws ecr get-login
et cela n'a pas fonctionné, mais l'introduction du profil aws avec--profile
argument fait l'affaire!Il existe un bogue connu dans le gestionnaire d'informations d'identification wincred sous Windows. La suppression de «https: //» de la commande de connexion générée résout ce problème.
au lieu de
Voir également la page de dépannage .
la source
J'ai rencontré 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.
Plus tôt,
aws ecr get-login --region us-east-1
généré commande de connexion docker avec l' URL de Registre non valide CE.la source
Sous Windows dans PowerShell , utilisez:
la source
J'ai eu ce problème avec une cause différente: je devais pousser 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 du registre, en ajoutant mon identifiant IAM (par exemple
arn:aws:iam::{AWS ACCT #}:user/{Username}
) en tant que principal. J'ai essayé de me connecter avec les étapes habituelles:Ce qui a bien sûr abouti
no basic auth credentials
. En fin de compte ,aws ecr get-login
vous vous connectez à l'ECR pour le registre associé à votre connexion , ce qui a du sens rétrospectivement. La solution consiste à indiquer àaws ecr get-login
quel (s) registre (s) vous souhaitez vous connecter.Après cela,
docker push
fonctionne très bien.la source
--profile
? J'ai un compte personnel mais j'essaie de pousser vers un compte d'entreprise. En d'autres termes, où puis-je trouverprofilename
Ensuite, selon les instructions de commande push ECR, coupez et collez les commandes suivantes
eval $(aws ecr get-login --region us-east-1)
add --profile 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 à nouveau toutes les commandes! Les informations d'identification que vous utilisez
aws ecr get-login
sont temporaires et expireront.la source
your-profile
?~/.aws/config
et~/.aws/credentials
.Dans mon cas, après l'exécution
aws ecr get-login --no-include-email --region *****
, je viens de copier la sortie de cette commande avec est de la formedocker login -u *** -p ************
, et vous la collez dans l'invite. La poussée a continué.la source
Les documents AWS vous indiquent d'exécuter la commande suivante (pour la région ap-sud-est-2)
Lorsque je suis tombé sur ce problème, il n'était pas clair pour moi sur la base de cette documentation que vous deviez entrer le résultat de cette commande dans le terminal et l'exécuter.
Le correctif qui a fonctionné pour moi était de copier le résultat dans le presse-papiers avec
Collez le résultat dans la ligne de commande et exécutez-le
la source
Après avoir exécuté cette commande:
(aws ecr get-login --no-include-email --region us-west-2)
exécutez simplement la commande de connexion docker à partir de la sortie
docker login -u AWS -p epJ....
est la façon dont docker se connecte à ECR
la source
Cette erreur est généralement générée si la connexion ecr a échoué. J'utilise le système Windows et j'ai utilisé "Powershell" en mode Administrateur pour me connecter d'abord à ecr.
Cela devrait afficher "Connexion réussie".
la source
J'ai rencontré le même problème et l'erreur que j'ai commise était d'utiliser le mauvais chemin de dépôt
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: In
"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.la source
La commande docker donnée par aws-cli est peu décalée ...
Lorsque vous utilisez la connexion docker, docker enregistre un serveur: paire de clés dans votre trousseau ou dans le fichier ~ / .docker / config.json
S'il enregistre la clé sous
https://7272727.dkr.ecr.us-east-1.amazonaws.com
la recherche de la clé pendant la transmission échouera car docker recherchera un serveur nommé7272727.dkr.ecr.us-east-1.amazonaws.com
nothttps://7272727.dkr.ecr.us-east-1.amazonaws.com
.Utilisez la commande suivante pour vous connecter:
Une fois que vous exécutez la commande, vous recevrez un
'Login Succeeded'
message et vous êtes bonaprès cela, votre commande push devrait fonctionner
la source
Il existe un moyen très simple de pousser des images docker vers ECR: Amazon ECR Docker Credential Helper . Installez-le simplement selon le guide fourni, mettez à jour votre
~/.docker/config.json
comme suit:et vous pourrez pousser / tirer vos images sans
docker login
.la source
J'ai rencontré ce problème également sous OSX. J'ai vu la réponse d'Oliver Salzburg et j'ai vérifié mon ~ / .docker / config.json. Il contenait plusieurs informations d'identification d'autorisation provenant des différents comptes AWS dont je dispose. J'ai supprimé le fichier et après avoir exécuté à nouveau get-login, cela a fonctionné.
la source
Assurez-vous d'utiliser la bonne région dans
aws ecr get-login
, elle doit correspondre à la région dans laquelle votre référentiel est créé.la source
Mon problème était d'avoir plusieurs informations d'identification AWS; default et dev. Depuis que j'essayais de déployer vers le développement, cela a fonctionné:
la source
FWIW, Debian 9, Docker version 18.06.1-ce, build e68fc7a:
$(aws ecr get-login | sed 's| -e none | |g')
la source
Si vous utilisez plusieurs profils et que vous devez vous connecter à un profil qui n'est pas votre profil par défaut, vous devez vous connecter avec cette commande:
la source
La commande suivante fonctionne pour moi:
Et puis j'exécute ces commandes:
la source
nous rencontrons également ce problème aujourd'hui et avons essayé tout ce qui est mentionné dans cet article (sauf la génération des informations d'identification AWS).
Nous avons finalement résolu le problème en mettant simplement à jour 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
la source
Si vous isolez des comptes AWS à des fins de CI / CD et que vous avez 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:
00000000000000
99999999999999
Si vous appelez
aws ecr get-login --region us-west-2 | bash
dans votre serveur CI, docker générera des informations d'identification temporaires dans~/.docker/config.json
.Mais vous voulez pointer vers le compte de l'ECR, vous devez donc changer le nom d'hôte.
Notez que cette situation dépend de la manière dont vous créez un utilisateur / une stratégie IAM pour autoriser l'accès ECR.
la source
Vous devez vous assurer que vous vous êtes connecté en utilisant les informations d'identification correctes, voir la description officielle de l'erreur et les vérifications ici
http://docs.aws.amazon.com/AmazonECR/latest/userguide/common-errors-docker.html
La correction "pas d'authentification de base" est décrite dans le lien
la source
Cette commande me donne une 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-le et exécutez-le. Maintenant, il affichera "Connexion réussie". Vous pouvez maintenant pousser votre image vers ECR.
Assurez-vous que votre règle AMI dispose de l'autorisation pour l'utilisateur auquel vous avez tenté de vous connecter.
la source