it-swarm.com.de

Image kann nicht auf Amazon ECR übertragen werden - schlägt fehl mit "keine grundlegenden Authentifizierungsdaten"

Ich versuche, ein Docker-Image in eine Amazon ECR-Registrierung zu verschieben. Ich verwende Docker-Client Docker Version 1.9.1, Build a34a1d5. Ich verwende "aws ecr get-login - region us-east-1", um die Docking-Login-Creds zu erhalten. Ich logge mich dann erfolgreich mit diesen Creds ein: 

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

Wenn ich versuche, mein Bild zu pushen, erhalte ich folgende Fehlermeldung:

$ 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

Ich stellte sicher, dass der aws-Benutzer die richtigen Berechtigungen hatte. Ich stellte auch sicher, dass das Repository es diesem Benutzer ermöglichte, auf ihn zu drücken. Um sicherzustellen, dass es sich nicht um ein Problem handelt, habe ich die Registrierung so eingestellt, dass alle Benutzer vollen Zugriff haben. Der Fehler "Keine grundlegenden Authentifizierungsdaten" wird durch nichts geändert. Ich kann nicht mit dem Debuggen beginnen, da der gesamte Verkehr verschlüsselt ist.

UPDATE

Also hatte ich etwas von Homer Simpson D'Oh, als ich die Ursache meines Problems erkannte. Ich habe Zugriff auf mehrere AWS-Konten. Obwohl ich aws configure verwendet habe, um meine Anmeldeinformationen für das Konto festzulegen, in dem ich mein Repository eingerichtet hatte, verwendete aws cli tatsächlich die Umgebungsvariablen AWS_ACCESS_KEY_ID und AWS_SECRET_ACCESS_KEY. Wenn ich also ein aws-ecr-get-login durchgeführt habe, gab es ein Login für das falsche Konto zurück. Ich habe nicht bemerkt, dass die Kontonummern unterschiedlich waren, bis ich jetzt zurückging und einige der vorgeschlagenen Antworten ausprobierte. Wenn ich die Umgebungsvariablen entferne, funktioniert alles richtig. Ich denke, das Motto der Geschichte ist, wenn Sie diesen Fehler treffen, stellen Sie sicher, dass das Repository, in dem Sie sich anmelden, mit dem Tag übereinstimmt, den Sie dem Bild zugewiesen haben.

117
Alec Rooney

wenn Sie $(aws ecr get-login --region us-east-1) ausführen, wird alles für Sie erledigt

80
Antonio Terreno

In meinem Fall war dies ein Fehler mit Docker für Windows und deren Unterstützung für den Windows Credential Manager.

Öffnen Sie Ihren ~/.docker/config.json und entfernen Sie den "credsStore": "wincred"-Eintrag.

Dadurch werden die Berechtigungsnachweise direkt in den config.json geschrieben. Sie müssen sich danach erneut anmelden.

Sie können diesen Fehler durch die Tickets # 22910 und # 24968 auf GitHub verfolgen.

51
Der Hochstapler

Wenn Sie Profile verwenden, vergessen Sie nicht, --profile=XXX an aws ecr get-login zu übergeben.

37
Greg

Ich hatte auch dieses Problem. Bei mir war es passiert, dass ich vergessen hatte, den Befehl auszuführen, der mir nach dem Laufen zurückgegeben wurde 

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

Dieser Befehl hat einen großen Fleck zurückgegeben, der genau dort den Befehl docker login enthält! Ich habe es nicht gemerkt. Es sollte so etwas zurückgeben:

docker login -u AWS -p <your_token_which_is_massive> -e none <your_aws_url>

Kopieren Sie diesen Befehl und fügen Sie ihn ein. Führen Sie anschließend den Befehl "Docker Push" aus, der ungefähr wie folgt aussieht:

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

Dies hätte auch funktionieren müssen, ohne die Berechtigungen zu öffnen. Siehe die Dokumentation: Private Registry Authentication .

[Bearbeiten: Eigentlich hatte ich auch Berechtigungsprobleme, als ich einen zweiten Test durchführte. Siehe Docker Push an AWS ECR Private Repo mit fehlerhaftem JSON ).]

Trotzdem hatte ich das gleiche Problem. Ich weiß nicht warum, aber ich habe erfolgreich den langwierigeren Auth-Mechanismus verwendet, der in den Dokumenten für Get-Authorization-Token beschrieben ist.

AWS CLI- und Docker-Versionen:

$ 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

Holen Sie sich das Authentifizierungs-Token ("Docker-Passwort").

aws ecr get-authorization-token --region us-east-1 --output text \
    --query authorizationData[].authorizationToken | base64 -d | cut -d: -f2

Hinweis: Mein ~/.aws/config gibt einen anderen Standardbereich an, daher musste --region us-east-1 explizit festgelegt werden.

Melden Sie sich interaktiv an (ändern Sie ############ in Ihre AWS-Konto-ID):

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>

Drücken Sie ein Bild (vorausgesetzt, Sie haben ein Andockbild test erstellt):

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

Versuche es mit:

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

vor Push.

11
MrMins

Wenn es jemandem hilft ...

Mein Problem war, dass ich die --profile-Option verwenden musste, um mich mit dem richtigen Profil aus der Berechtigungsdatei zu authentifizieren.

Als Nächstes hatte ich den Befehl --region [region_name] weggelassen, der auch den Fehler "no basic auth credentials" ausgab.

Die Lösung für mich war, mein Kommando daraus zu ändern:

aws ecr get-login

Zu diesem:

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

Beispiel:

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

Hoffe das hilft jemandem!

11
Lansana

Es gibt einen bekannten Fehler im Wincred-Berechtigungsmanager unter Windows. Durch das Entfernen von 'https: //' aus dem generierten Anmeldebefehl wird dieses Problem gelöst.

docker login -u AWS -p <password> <aws_account_id>.dkr.ecr.<region>.amazonaws.com

anstatt 

docker login -u AWS -p <password> https://<aws_account_id>.dkr.ecr.<region>.amazonaws.com

Siehe auch die Fehlerbehebungsseite .

8
Tom Rijntjes

Ich habe das gleiche Problem erlebt. 

Durch das Generieren neuer AWS-Berechtigungsnachweise (Zugriffsschlüssel) und die Neukonfiguration der AWS-CLI mit neuen Berechtigungsnachweisen wurde das Problem behoben.

Früher hat aws ecr get-login --region us-east-1 einen Docker-Login-Befehl mit ungültiger URL der EC-Registry generiert.

8
temasso
  1. Stellen Sie sicher, dass Sie zuerst die ECR-Registrierung erstellt haben.
    Schneiden Sie dann die folgenden Befehle gemäß den Anweisungen für den ECR-Push-Befehl aus und fügen Sie sie ein
  2. Führen Sie den Docker-Anmeldebefehl aus (eval unter Mac/Linux überspringt das Ausschneiden und Einfügen).
    eval $(aws ecr get-login --region us-east-1)
    Fügen Sie --profile hinzu, wenn Sie mehrere AWS-Konten verwenden
    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

Im Fehlerfall stellen Sie sicher, dass Sie alle Befehle erneut ausführen! Die Anmeldeinformationen, die Sie erhalten, verwenden aws ecr get-login sind temporär und verfallen.

5
Jason

In meinem Fall habe ich nach dem Ausführen von aws ecr get-login --no-include-email --region ***** gerade die Ausgabe dieses Befehls mit der Form docker login -u *** -p ************ kopiert, und Sie fügen sie in die Aufforderung ein. Das Drängen ging voran.

4
Julien Nyambal

In den AWS-Dokumenten werden Sie aufgefordert, den folgenden Befehl auszuführen (für die Region ap-südost-2)

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

Als ich auf dieses Problem gestoßen bin, war mir aufgrund dieser Dokumente nicht klar, dass Sie das Ergebnis dieses Befehls in das Terminal eingeben und ausführen müssen.

Fix, der für mich funktionierte, war, das Ergebnis mit in die Zwischenablage zu kopieren

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

Fügen Sie das Ergebnis in die Befehlszeile ein und führen Sie es aus

4
Dan Groch

Nachdem Sie diesen Befehl ausgeführt haben:

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

führen Sie einfach den Docker-Login-Befehl aus der Ausgabe aus

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

ist die Art und Weise, wie sich das Docker in ECR anmeldet

3

Ich hatte dieses Problem mit einer anderen Ursache: Ich musste in eine Registry pushen, die nicht mit meinem AWS-Konto verknüpft war (die ECR-Registry eines Kunden). Der Client hatte mir Zugriff auf die Registerkarte Berechtigungen für die Registrierung gewährt, indem er meine IAM-ID (z. B. arn:aws:iam::{AWS ACCT #}:user/{Username}) als Principal hinzufügte. Ich habe versucht, mich mit den üblichen Schritten anzumelden:

$(aws ecr get-login --region us-west-2 --profile profilename)
docker Push {Client AWS ACCT #}.dkr.ecr.us-west-1.amazonaws.com/imagename:latest

Was natürlich zu no basic auth credentials geführt hat. Wie sich herausstellt , meldet sich aws ecr get-login bei ECR für die mit Ihrem Login verknüpfte Registrierung an, was im Nachhinein sinnvoll ist. Die Lösung besteht darin, aws ecr get-login mitzuteilen, in welche Registrierung (en) Sie sich einloggen möchten.

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

Danach funktioniert docker Push gut.

2
Jason Clark

Ich bin auf dieses Problem gestoßen, das auch unter OSX läuft. Ich sah die Antwort von Oliver Salzburg und überprüfte meine ~/.docker/config.json. Es hatte mehrere Berechtigungsnachweise von den verschiedenen AWS-Konten, die ich habe. Ich löschte die Datei und nachdem ich get-login erneut ausgeführt hatte, funktionierte es.

1
Minh Tran

Mein Problem bestand darin, mehrere AWS-Berechtigungsnachweise zu haben. default und dev. Da ich versucht hatte, die Entwicklung zu implementieren, funktionierte dies:

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

Verwenden Sie unter Windows in PowerShell Folgendes:

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

Ich war mit dem gleichen Problem konfrontiert und mein Fehler war, den falschen Repo-Pfad zu verwenden

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

Im obigen Pfad habe ich den Fehler gemacht: In "dkr.ecr.us-east-1.amazonaws.com" anstelle von "west". Ich verwendete "east"". Nachdem ich meinen Fehler korrigiert hatte, konnte ich das Bild erfolgreich pushen.

1
karthik vee

FWIW, Debian 9, Docker-Version 18.06.1-ce, Build e68fc7a:

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

1
Ligemer

Wenn Sie mehrere Profile verwenden und sich bei einem anderen als Ihrem Standardprofil anmelden müssen, müssen Sie sich mit diesem Befehl anmelden:

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

Führen Sie einfach das aus, was in Schritt 1 zurückgegeben wurde, um das Problem zu beheben.

0
SmallChess

Ich füge die Region-Option hinzu und alles funktioniert dann gut für mich:

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

wir sind auch heute mit diesem Problem konfrontiert und haben alles ausprobiert, das in diesem Beitrag erwähnt wurde (mit Ausnahme der Erstellung von AWS-Berechtigungen). 

Wir haben das Problem endlich gelöst, indem wir einfach Docker aufgerüstet haben, dann hat der Push funktioniert. 

Das Problem trat bei Docker 1.10.x auf und wurde mit Docker 1.11.x behoben. 

Hoffe das hilft

0

Stellen Sie sicher, dass Sie die richtige Region in aws ecr get-login verwenden. Diese muss mit der Region übereinstimmen, in der Ihr Repository erstellt wird.

0
Lech Migdal

Diese Fehlermeldung stammt von Docker und ist nicht unbedingt auf AWS bezogen, da ich die gleiche Fehlermeldung erhalten habe, wenn AWS nicht verwendet wird

In meinem Fall habe ich im Test das Verzeichnis ~/.docker entfernt und diesen Fehler erhalten ... nachdem ich meine lokale Dockerregistrierung abprallte, war Docker Push in Ordnung

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

Dieser Befehl gibt mir den korrekten Befehl zum Anmelden. Wenn Sie "--no-include-email" nicht verwenden, wird ein anderer Fehler ausgegeben. Die Ausgabe des obigen Befehls sieht wie dieser Docker-Login aus. Kopieren Sie das und führen Sie es aus. Jetzt wird "Login erfolgreich" angezeigt. Jetzt können Sie Ihr Bild nach ECR verschieben. 

Stellen Sie sicher, dass Ihre AMI-Regel die Berechtigung für den Benutzer besitzt, den Sie versucht haben, sich anzumelden. 

0

Sie müssen sich vergewissern, dass Sie sich mit den richtigen Anmeldeinformationen angemeldet haben 

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

Die Behebung "keine Basisauthentifizierung" wird im Link beschrieben

0
suresh

Der von aws-cli gegebene Docker-Befehl ist wenig ...

Bei der Docker-Anmeldung speichert Docker ein Server: -Schlüsselpaar entweder in Ihrem Schlüsselbund oder in der Datei ~/.docker/config.json 

Wenn der Schlüssel unter " https://7272727.dkr.ecr.us-east-1.amazonaws.com " gespeichert wird, schlägt die Suche nach dem Schlüssel während des Push-Vorgangs fehl, da das Docker nach einem Server namens " 7272727.dkr.ecr.us-east-1.amazonaws.com "nicht" https://7272727.dkr.ecr.us-east-1.amazonaws.com ".

Verwenden Sie den folgenden Befehl, um sich anzumelden: 
eval $ (aws ecr get-login --no-include-email --region us-east-1 --profile | seds | https: // || ')

Sobald Sie den Befehl ausführen, erhalten Sie die Meldung "Login erfolgreich" und Sie sind zufrieden 
Danach sollte Ihr Push-Befehl funktionieren

0
Dakshin

Ich habe eine Antwort auf diese Frage in den Docker-Foren veröffentlicht. In meinem Fall bestand das Problem darin, dass der Centos "Docker" nicht mit Docker CE identisch war und daher fehlgeschlagen ist mit:

keine grundauth

Ich habe es einfach behoben, indem ich "docker-ce" auf centos installiert habe.

Referenz: https://forums.docker.com/t/docker-Push-to-ecr-failing-with-no-basic-auth-credentials/17358/

0
scooter

Der folgende Befehl funktioniert für mich:

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

Und dann führe ich diese Befehle aus:

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

In meinem Fall (und wahrscheinlich in allen Fällen) ist dieser Fehler auf mehrere AWS-Konten zurückzuführen. AWS ECR verwendet also nicht die richtigen aws-Berechtigungsnachweise, die mit dem aws-Konto verknüpft sind.

Ich habe mehrere hier genannte Lösungen ausprobiert, aber es gelang mir nicht. Es funktionierte, nachdem Token anstelle von Benutzername und Passwort verwendet wurden. Ich habe es nach den Anweisungen hier zum Laufen gebracht. https://btburnett.com/2017/01/docker-login-für-Amazon-aws-ecr-using-windows-powershell.html

Wenn Sie AWS-Konten für CI/CD-Zwecke isolieren und ein ECR-Repository von mehreren AWS-Konten gemeinsam nutzen, müssen Sie den ~/.docker/config.json möglicherweise manuell ändern.

Nehmen wir an, Sie haben folgende Einstellungen:

  1. ECR gehört der AWS-Konto-ID 00000000000000
  2. Der CI-Server besitzt die AWS-Konto-ID 99999999999999.

Wenn Sie aws ecr get-login --region us-west-2 | bash innerhalb Ihres CI-Servers aufrufen, generiert das Andockfenster temporäre Anmeldeinformationen in ~/.docker/config.json.

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

Sie möchten jedoch auf das Konto des ECR verweisen, daher müssen Sie den Hostnamen ändern.

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

Beachten Sie, dass diese Situation davon abhängt, wie Sie IAM-Benutzer/Richtlinien bilden, um den ECR-Zugriff zuzulassen.

0
tomodian