Ich versuche, ein Docker-Image in eine Amazon ECR-Registrierung zu verschieben. Ich verwende Docker Client Docker Version 1.9.1, Build a34a1d5
. Ich benutze aws ecr get-login --region us-east-1
, um die Docker-Login-Creds zu bekommen. Dann logge ich mich erfolgreich wie folgt 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 jedoch versuche, mein Bild zu verschieben, wird der folgende Fehler angezeigt:
$ 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 habe sichergestellt, dass der aws-Benutzer die richtigen Berechtigungen hat. Ich habe auch sichergestellt, dass das Repository dem Benutzer erlaubt, darauf zu pushen. Um sicherzugehen, dass dies kein Problem ist, habe ich die Registrierung so eingestellt, dass alle Benutzer vollen Zugriff haben. Nichts ändert den "no basic auth credentials"
Fehler. Ich weiß nicht, wie ich mit dem Debuggen beginnen soll, da der gesamte Datenverkehr verschlüsselt ist.
AKTUALISIEREN
Ich hatte also ein bisschen Homer Simpson D'Oh-Moment, als ich die Grundursache meines Problems erkannte. Ich habe Zugriff auf mehrere AWS-Konten. Obwohl ich aws configure
meine Anmeldeinformationen für das Konto festgelegt habe, in dem ich mein Repository eingerichtet hatte, verwendete die aws cli tatsächlich die Umgebungsvariablen AWS_ACCESS_KEY_ID
und AWS_SECRET_ACCESS_KEY
. Als ich das tat aws ecr get-login
, gab ich ein Login für das falsche Konto zurück. Ich habe nicht bemerkt, dass die Kontonummern unterschiedlich waren, bis ich jetzt zurückgegangen bin, um einige der vorgeschlagenen Antworten auszuprobieren. Wenn ich die Umgebungsvariablen entferne, funktioniert alles korrekt. Ich denke, das Motto der Geschichte lautet: Wenn Sie auf diesen Fehler stoßen, stellen Sie sicher, dass das Repository, in das Sie sich einloggen, mit dem Tag übereinstimmt, das Sie auf das Bild angewendet haben.
quelle
Antworten:
Wenn Sie ausführen
$(aws ecr get-login --region us-east-1)
, wird alles für Sie erledigtquelle
docker login
Befehl ausgeführt.In meinem Fall war dies ein Fehler bei Docker für Windows und deren Unterstützung für den Windows Credential Manager.
Öffnen Sie Ihre
~/.docker/config.json
und entfernen Sie den"credsStore": "wincred"
Eintrag.Dadurch werden Anmeldeinformationen
config.json
direkt in die geschrieben . Sie müssen sich danach erneut anmelden.Sie können diesen Fehler über die Tickets Nr. 22910 und Nr. 24968 auf GitHub verfolgen .
quelle
~/.docker
bedeutet.docker
in Ihrem Home-Verzeichnis. Versuchen Sie%HOMEDRIVE%%HOMEPATH%\.docker
Wenn Sie Profile verwenden, vergessen Sie nicht passieren
--profile=XXX
zuaws ecr get-login
.quelle
Ich hatte auch dieses Problem. Was mit mir passiert ist, war, dass ich vergessen habe, den Befehl auszuführen, der mir nach dem Ausführen zurückgegeben wurde
Dieser Befehl hat einen großen Blob zurückgegeben, der den
docker login
Befehl genau dort enthält! Ich habe es nicht bemerkt. Es sollte ungefähr so etwas zurückgeben:Kopieren Sie diesen Befehl, fügen Sie ihn ein und führen Sie dann Ihren Docker-Push-Befehl aus, der ungefähr so aussieht:
quelle
Dies hätte auch ohne Öffnen der Berechtigungen funktionieren müssen. Siehe die Dokumentation: Private Registry-Authentifizierung .
[Bearbeiten: Eigentlich hatte ich auch Berechtigungsprobleme, als ich einen zweiten Test machte. Siehe Docker Push to AWS ECR Private Repo, das mit fehlerhaftem JSON fehlschlägt .]
Trotzdem hatte ich das gleiche Problem; Ich weiß nicht warum, aber ich habe erfolgreich den langwierigeren Authentifizierungsmechanismus verwendet, der in den Dokumenten für das Get-Authorization-Token beschrieben ist
AWS CLI- und Docker-Versionen:
Holen Sie sich das Auth-Token ('Docker-Passwort').
Hinweis: Mein ~ / .aws / config gibt einen anderen Standardbereich an, daher musste ich explizit festlegen
--region us-east-1
.Melden Sie sich interaktiv an (ändern Sie
############
Ihre AWS-Konto-ID):Push ein Bild (vorausgesetzt, Sie haben ein Docker-Bild erstellt
test
):quelle
aws ecr get-authorization-token > config.json
Versuche es mit:
vor dem drücken.
quelle
no basic auth credentials Invalid IPv6 URL
Wenn es jemandem hilft ...
Mein Problem war, dass ich die
--profile
Option verwenden musste, um mich mit dem richtigen Profil aus der Anmeldeinformationsdatei zu authentifizieren.Als nächstes hatte ich den
--region [region_name]
Befehl ausgelassen , der auch den Fehler "Keine grundlegenden Authentifizierungsdaten" ergab.Die Lösung für mich bestand darin, meinen Befehl von diesem zu ändern:
aws ecr get-login
Dazu:
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!
quelle
AWS_PROFILE=myprofile aws ecr get-login
und es hat nicht funktioniert, aber die Einführung des aws-Profils mit--profile
Argumenten macht den Trick!Aktualisieren
Da AWS CLI Version 2 -
aws ecr get-login
veraltet ist und die richtige Methode istaws ecr get-login-password
.Daher lautet die richtige und aktualisierte Antwort wie folgt:
docker login -u AWS -p $(aws ecr get-login-password --region us-east-1) xxxxxxxx.dkr.ecr.us-east-1.amazonaws.com
quelle
Es gibt einen bekannten Fehler im Wincred Credential Manager unter Windows. Das Entfernen von 'https: //' aus dem generierten Anmeldebefehl löst dieses Problem.
anstatt
Siehe auch die Seite zur Fehlerbehebung .
quelle
Ich habe das gleiche Problem erlebt.
Durch das Generieren neuer AWS-Anmeldeinformationen (Zugriffsschlüssel) und das Neukonfigurieren der AWS-CLI mit neuen Anmeldeinformationen wurde das Problem behoben.
Zuvor
aws ecr get-login --region us-east-1
generierter Docker-Anmeldebefehl mit ungültiger EC-Registrierungs-URL.quelle
Ich hatte dieses Problem aus einem anderen Grund: Ich musste auf eine Registrierung pushen, die nicht mit meinem AWS-Konto verknüpft ist (die ECR-Registrierung eines Kunden). Der Client hat mir Zugriff auf der Registerkarte Berechtigungen für die Registrierung gewährt, indem er meine IAM-ID (z. B.
arn:aws:iam::{AWS ACCT #}:user/{Username}
) als Principal hinzugefügt hat . Ich habe versucht, mich mit den üblichen Schritten anzumelden:Was natürlich dazu führte
no basic auth credentials
. Wie sich herausstellt ,aws ecr get-login
melden Sie sich bei der ECR für die Registrierung an, die Ihrem Login zugeordnet ist , was im Nachhinein sinnvoll ist. Die Lösung besteht darin, anzugeben, beiaws ecr get-login
welchen Registrierungen Sie sich anmelden möchten.Danach
docker push
funktioniert gut.quelle
--profile
? Ich habe ein persönliches Konto, aber ich versuche, auf ein Firmenkonto zu pushen. Mit anderen Worten, wo finde ichprofilename
Schneiden Sie dann gemäß den ECR-Push-Befehlsanweisungen die folgenden Befehle aus und fügen Sie sie ein
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)
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
Stellen Sie im Fehlerfall sicher, dass Sie alle Befehle erneut ausführen! Die Anmeldeinformationen, die Sie verwenden,
aws ecr get-login
sind vorübergehend und verfallen.quelle
your-profile
?~/.aws/config
und~/.aws/credentials
-Dateien eingegeben werden.In meinem Fall habe
aws ecr get-login --no-include-email --region *****
ich nach dem Ausführen nur die Ausgabe dieses Befehls mit der Form kopiertdocker login -u *** -p ************
und Sie fügen sie in die Eingabeaufforderung ein. Das Schieben ging voran.quelle
Verwenden Sie unter Windows in PowerShell Folgendes :
quelle
In den AWS-Dokumenten werden Sie aufgefordert, den folgenden Befehl auszuführen (für die Region ap-südost-2).
Als ich auf dieses Problem stieß, war mir aufgrund dieser Dokumente nicht klar, dass Sie das Ergebnis dieses Befehls in das Terminal eingeben und ausführen müssen.
Das Problem, das bei mir behoben wurde, bestand darin, das Ergebnis mit in die Zwischenablage zu kopieren
Fügen Sie das Ergebnis in die Befehlszeile ein und führen Sie es aus
quelle
Nach dem Ausführen dieses Befehls:
(aws ecr get-login --no-include-email --region us-west-2)
Führen Sie einfach den Docker-Anmeldebefehl über die Ausgabe aus
docker login -u AWS -p epJ....
ist die Art und Weise, wie sich Docker bei ECR anmelden
quelle
Dieser Fehler wird im Allgemeinen ausgelöst, wenn die Anmeldung bei ecr fehlgeschlagen ist. Ich verwende das Windows-System und habe im Administratormodus "Powershell" verwendet, um mich zuerst bei ecr anzumelden.
Dies sollte "Anmeldung erfolgreich" ausgeben.
quelle
Ich hatte das gleiche Problem und der Fehler, den ich gemacht habe, war, den falschen Repo-Pfad zu verwenden
z.B:
docker push xxxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/jenkins:latest
Auf dem obigen Pfad habe ich hier den Fehler gemacht: In
"dkr.ecr.us-east-1.amazonaws.com"
statt"west"
. Ich habe "verwendeteast"
. Nachdem ich meinen Fehler korrigiert hatte, konnte ich das Bild erfolgreich pushen.quelle
Der Docker-Befehl von aws-cli ist wenig falsch ...
Bei Verwendung der Docker-Anmeldung speichert Docker ein Server-Schlüssel-Paar entweder in Ihrem Schlüsselbund oder in der Datei ~ / .docker / config.json
Wenn
https://7272727.dkr.ecr.us-east-1.amazonaws.com
der Schlüssel während des Push-Vorgangs unter der Suche nach dem Schlüssel gespeichert wird, schlägt dies fehl, da Docker nach einem Server mit dem Namen7272727.dkr.ecr.us-east-1.amazonaws.com
not suchthttps://7272727.dkr.ecr.us-east-1.amazonaws.com
.Verwenden Sie den folgenden Befehl, um sich anzumelden:
Sobald Sie den Befehl ausführen, erhalten Sie eine
'Login Succeeded'
Nachricht und danach können SieIhren Push-Befehl ausführen
quelle
Es gibt eine sehr einfache Möglichkeit, Docker-Bilder an ECR zu senden: Amazon ECR Docker Credential Helper . Installieren Sie es einfach gemäß der mitgelieferten Anleitung und aktualisieren Sie es
~/.docker/config.json
wie folgt:und Sie können Ihre Bilder ohne schieben / ziehen
docker login
.quelle
Ich bin auch auf dieses Problem unter OSX gestoßen. Ich habe die Antwort von Oliver Salzburg gesehen und meine ~ / .docker / config.json überprüft. Es enthielt mehrere Berechtigungsnachweise von den verschiedenen AWS-Konten, die ich habe. Ich habe die Datei gelöscht und nach dem erneuten Ausführen von get-login hat es funktioniert.
quelle
Stellen Sie sicher, dass Sie die richtige Region verwenden
aws ecr get-login
. Diese muss mit der Region übereinstimmen, in der Ihr Repository erstellt wurde.quelle
Mein Problem bestand darin, mehrere AWS-Anmeldeinformationen zu haben. Standard und dev. Da ich versucht habe, Dev zu implementieren, hat dies funktioniert:
quelle
FWIW, Debian 9, Docker Version 18.06.1-ce, Build e68fc7a:
$(aws ecr get-login | sed 's| -e none | |g')
quelle
Wenn Sie mehrere Profile verwenden und sich bei einem Profil anmelden müssen, das nicht Ihr Standardprofil ist, müssen Sie sich mit folgendem Befehl anmelden:
quelle
Der folgende Befehl funktioniert bei mir:
Und dann führe ich diese Befehle aus:
quelle
Wir sind heute auch auf dieses Problem gestoßen und haben alles versucht, was in diesem Beitrag erwähnt wird (außer das Generieren von AWS-Anmeldeinformationen).
Wir haben das Problem endlich gelöst, indem wir Docker einfach aktualisiert haben, und dann hat der Push funktioniert.
Das Problem wurde mit Docker 1.10.x festgestellt und mit Docker 1.11.x behoben.
Hoffe das hilft
quelle
Wenn Sie AWS-Konten für CI / CD-Zwecke isolieren und ein ECR-Repository für mehrere AWS-Konten freigeben, müssen Sie das möglicherweise
~/.docker/config.json
manuell ändern .Angenommen, Sie haben diese Einstellungen:
00000000000000
99999999999999
Wenn Sie
aws ecr get-login --region us-west-2 | bash
innerhalb Ihres CI-Servers anrufen , generiert Docker temporäre Anmeldeinformationen in~/.docker/config.json
.Sie möchten jedoch auf das Konto der ECR verweisen, daher müssen Sie den Hostnamen ändern.
Beachten Sie, dass diese Situation davon abhängt, wie Sie IAM-Benutzer / -Richtlinien bilden, um den ECR-Zugriff zu ermöglichen.
quelle
Sie müssen sicherstellen, dass Sie sich mit den richtigen Anmeldeinformationen angemeldet haben. Siehe die offizielle Fehlerbeschreibung und die Überprüfungen hier
http://docs.aws.amazon.com/AmazonECR/latest/userguide/common-errors-docker.html
Das Beheben von "keine grundlegende Authentifizierung" wird im Link beschrieben
quelle
Dieser Befehl gibt mir den richtigen Befehl zum Anmelden. Wenn Sie "--no-include-email" nicht verwenden, wird ein weiterer Fehler ausgegeben. Die Ausgabe des obigen Befehls sieht wie folgt aus: Docker-Login -u AWS -p ************************* sehr groß ******. Kopieren Sie das und führen Sie es aus. Jetzt wird "Login Succeeded" angezeigt. Jetzt können Sie Ihr Bild auf ECR verschieben.
Stellen Sie sicher, dass Ihre AMI-Regel die Berechtigung für den Benutzer hat, für den Sie sich anmelden wollten.
quelle