amazon-web-services - pricing - install docker on amazon linux ec2




Impossible de transmettre une image à Amazon ECR-échec sans "informations d'identification d'authentification de base" (20)

  1. Assurez-vous d’avoir d’abord créé le registre ECR.
    Ensuite, conformément aux instructions de la commande ECR Push, coupez et collez les commandes suivantes
  2. Exécutez la commande docker login (eval sur Mac / Linux ignore le couper-coller)
    eval $(aws ecr get-login --region us-east-1)
    ajoutez --profile 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 de relancer toutes les commandes! Les informations d'identification que vous obtenez en utilisant aws ecr get-login sont temporaires et expirent.

J'essaie de transférer une image de menu fixe dans un registre Amazon ECR. J'utilise le client Docker Docker version 1.9.1, construire 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 utilisateurs de la manière suivante:

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 avait les autorisations appropriées. Je me suis également assuré que le référentiel permettait à cet utilisateur d'y accéder. Pour que cela ne soit pas un problème, je règle 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é.

MISE À JOUR

Donc, j'ai eu un moment de Homer Simpson D'Oh lorsque 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.


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


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, quelle que soit la source d'authentification utilisée.

Dans mon cas, dans le test, j'ai supprimé le répertoire ~ / .docker et j'ai eu cette erreur ... après avoir fait rebondir mon registre de docker local, le transfert de docker s'est bien passé


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

[Edit: en fait, j'ai également eu des problèmes d'autorisations lors d'un deuxième test. Reportez-vous à la section Push de Docker vers le référentiel privé AWS ECR échouant 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-authorization-token

Versions AWS CLI et 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 fait un test image de menu fixe):

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

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 docker login -u *** -p ************ et vous le collez dans l'invite. La poussée a eu lieu.


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' "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.


Exécutez simplement ce qui est retourné à la première étape pour résoudre le problème.


FWIW, Debian 9, Docker version 18.06.1-ce, construisez e68fc7a:

$(aws ecr get-login | sed 's| -e none | |g')


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


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 de 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 votre commande push de docker qui ressemble à ceci:

docker push 8888888.blah.blah.ap-southwest-1.amazonaws.com/dockerfilename

J'ai fait face au même problème et l'erreur était 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'ai pu pousser l'image avec succès.


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, aws ecr get-login --region us-east-1 générait une commande de connexion docker avec une URL de registre EC non valide.


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

Lorsque vous utilisez la connexion Docker, Docker enregistre une paire 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é lors de l' 7272727.dkr.ecr.us-east-1.amazonaws.com échouera, car docker recherchera un serveur nommé 7272727.dkr.ecr.us-east-1.amazonaws.com pas https://7272727.dkr.ecr.us-east-1.amazonaws.com .

Utilisez la commande suivante pour vous connecter:

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

Une fois que vous avez exécuté la commande, vous obtenez 'Login Succeeded' message 'Login Succeeded' , puis vous avez terminé
après cela votre commande push devrait fonctionner


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, pour ce qui est de la documentation, que vous deviez entrer 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


Si ça aide quelqu'un ...

Mon problème était que je devais utiliser l'option --profile afin de --profile 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!


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:

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

Si vous appelez aws ecr get-login --region us-west-2 | bash 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 souhaitez indiquer le compte de l'ECR, vous devez donc modifier 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.


Si vous utilisez plusieurs profils et que vous devez vous connecter à un profil autre que le profil par défaut, vous devez vous connecter à l'aide de cette commande:

eval $(aws ecr get-login --no-include-email --region us-east-1 --profile yourprofile | sed 's|https://||')

Sous Windows dans PowerShell , utilisez:

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

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


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