webentwicklung-frage-antwort-db.com.de

AWS-CLI-Ausgabe für "Authorization Token" auf MacOS Sierra ist abgelaufen

Ich versuche, ein Docker-Image mit dem aws-cli in das AWS ECR-Repository zu verschieben.

  • Ich führe einfach den get-login Befehl aus
  • die Ausgabe ausführen (die login succeeded zurückgibt) 
  • dann versuche ein Docker-Image zu schieben, dann erhalte ich die -Nachricht:
    denied: Your Authorization Token has expired. Please run 'aws ecr get-login' to fetch a new one.

Ich weiß nicht was schief läuft, ich drücke auf das richtige Repo, die Zeit auf meinem Mac ist korrekt. Das hat vorher funktioniert, aber seit ich meinen Mac neu installiert und auf macOS Sierra aktualisiert habe, funktioniert er nicht mehr.

Meine aws --version-Ausgabe:

aws-cli/1.11.34 Python/2.7.10 Darwin/16.3.0 botocore/1.4.91

Die vollständige Ausgabe der Befehle, die ich ausführte:

$ aws ecr get-login --region eu-west-1
docker login -u AWS -p AQECAHh....b6Wk -e none https://1234567890.dkr.ecr.eu-west-1.amazonaws.com
$ docker login -u AWS -p AQECAHh....b6Wk -e none https://1234567890.dkr.ecr.eu-west-1.amazonaws.com
Flag --email has been deprecated, will be removed in 1.13.
Login Succeeded
$ docker Push 1234567890.dkr.ecr.eu-west-1.amazonaws.com/service-web:latest
The Push refers to a repository [1234567890.dkr.ecr.eu-west-1.amazonaws.com/service-web]
c1f87971dfa9: Preparing 
2eb644aea3de: Preparing 
9c8843ffe48e: Preparing 
39bb58d049d4: Preparing 
f053bc969599: Preparing 
7169084246b8: Waiting 
bb134a1936fd: Waiting 
184e76848a1c: Waiting 
75c8fcf65748: Waiting 
eb9b9ee1ea58: Waiting 
f4bf35723edd: Waiting 
ddffe1a64b3c: Waiting 
fd1a1154db16: Waiting 
b542e946067a: Waiting 
d49ed2a5e1ed: Waiting 
bb39b980367a: Waiting 
25b8358d062f: Waiting 
997eee521fc7: Waiting 
50b5447183a8: Waiting 
4339b5cb0e1d: Waiting 
3dbd4a53b21b: Waiting 
2bec16216500: Waiting 
b9fd8e264df6: Waiting 
b6ca02dfe5e6: Waiting 
denied: Your Authorization Token has expired. Please run 'aws ecr get-login' to fetch a new one.
23

Keine der oben genannten Lösungen funktionierte für meine, aber ich stellte fest, dass das Einstellen der Region im ECR-Login-Befehl funktioniert hat.

aws ecr get-login --region us-west-2

24
Kamil Wojcik

Die neuesten Versionen von Docker verwenden eine neue Funktion zum Speichern von Anmeldeinformationen, die einen Fehler enthält wobei ein docker login mit einer URL, die ein Protokoll angibt, zu Fehlern beim Token führt. Dieses Problem wird in Docker 1.13 behoben.

Zur Zeit besteht die Problemumgehung darin, Ihre Login-Befehle ohne Angabe des Protokolls auszuführen.

Also in dem von aws ecr get-login zurückgegebenen Befehl blob:

docker login -u AWS -p AQECAHh....b6Wk -e none https://1234567890.dkr.ecr.eu-west-1.amazonaws.com

Sollte durch dieses ersetzt werden:

docker login -u AWS -p AQECAHh....b6Wk -e none 1234567890.dkr.ecr.eu-west-1.amazonaws.com

Wenn Sie den https:// nicht angeben, funktioniert das Andockfenster vorerst.

17
wkl

Möglicherweise führen Sie nur den Befehl aus und fügen den Befehl, der von diesem Befehl ausgegeben wird, nicht zurück in das Terminal ein. Einfacher Fehler zu machen. Sobald du rennst: 

aws ecr get-login --no-include-email --region us-east-1 

Ein anderer Befehl wird zur Ausführung ausgedruckt. Sie müssen diesen Befehl kopieren und in Ihrem Terminal ausführen, um sich vollständig zu authentifizieren. 

Oder eine coole Abkürzung ist, den Befehl echo'd zurück in die Shell zu leiten:
aws ecr get-login --no-include-email --region us-east-1 | sh

12
Dakota Hipp

Hatte gerade das gleiche Problem unter Linux Mint 18.1 (Ubuntu 16.04) mit AWS ECR und dem neuesten Docker 17.06.1-ce, der über den neuesten Python Docker-Client 2.5.1 verwendet wurde. Login hat funktioniert, Push fehlgeschlagen.

Das Entfernen von ~/.docker/config.json hat geholfen. Es enthielt nur ein wahrscheinlich veraltetes Berechtigungszeichen.

Ich glaube nicht, dass es etwas mit dem zugrunde liegenden Betriebssystem zu tun hat. In meinem Fall funktionierte es zuvor und die einzige Änderung, an die ich mich erinnern kann, war ein Upgrade von Ubuntu Repos docker.io 1.12 auf Docker Repos docker-ce 17.06.

4
saaj

Sie erhalten auch die Meldung "Ihr Autorisierungs-Token ist abgelaufen", wenn Sie mehr als einen Berechtigungsnachweis in ~/.aws/Berechtigungsnachweis (Pfad abhängig von Ihrem Betriebssystem) haben und vergessen, das Flag --p hinzuzufügen.

Verwenden Sie diesen Befehl, um sich anzumelden:

aws ecr get-login --region eu-west-1 --p <yourprofilename>
3
Nik

Sie müssen Ihr Autorisierungs-Token alle 12 Stunden aktualisieren. Versuchen Sie Folgendes: 

$(aws ecr get-login --no-include-email --region us-east-1) - Ändern Sie die Region entsprechend Ihrer Konfiguration

3
zooblin

Ich habe auch den gleichen Fehler erhalten. Unten ist die Lösung, die ich ausprobiert habe und sie funktioniert: 1. Führen Sie den Befehl aus: Aws ecr get-login --no-include-email --region ap-südost-1 (Ändern Sie die Region entsprechend Ihrem Repository) 2. Sie erhalten etwa folgende Ausgabe: Docker-Login -u AWS -p xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx == https://youraccountid.dkr.ecr.ap-southeast-1.amazonaws.com

Entfernen Sie "https: //" und führen Sie den Befehl als Docker-Login aus. -U AWS -p xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx === Ihraccountid.dkr.ecr.ap-southeast-1.amazonaws.com

Und es wird funktionieren und Sie können das Bild schieben.

2
rakhim

Ich hatte Glück mit eval. Zum Beispiel,

$ aws ecr get-login --region us-east-1 --no-include-email --profile username_env 

Funktionierte nicht.

$ eval $(aws ecr get-login --region us-east-1 --no-include-email --profile username_env)

Funktionierte.

1
Ryan Dahlke

Ich habe die stabile Version von Docker für Mac Version 1.12 verwendet.

Ich habe gerade ein Upgrade auf die Betaversion Version 1.13.0-rc4-beta34.1 (14853) Durchgeführt und jetzt funktioniert alles wie beabsichtigt.

Wenn es also Leute mit dem gleichen Problem gibt, stellen Sie sicher, dass Sie Docker für Mac Version 1.13 oder höher verwenden. Wenn 1.13 noch nicht veröffentlicht ist, wechseln Sie zur Betaversion.

In meinem Fall bestand das Problem aus mehreren Anmeldeinformationen in ~/.aws/credentials, sodass ich --profile verwendete

aws ecr get-login --no-include-email --region us-east-2 --profile xxxx

Das hat bei mir funktioniert. 

0
Chetan kapoor

Dies geschah, als ich versuchte, Push/Pull aus einer Registrierung in einem anderen AWS-Konto durchzuführen. Ich musste get-login mit dem --registry-ids-Flag ausführen und die ID der Registrierung übergeben, in die ich mich einloggen wollte.

0
spiffytech

Warnung: aws ecr get-login scheint keine Verbindung zu AWS-Servern herzustellen und scheint zu funktionieren, selbst wenn Sie über schlechte AWS-Zugriffs-/Geheimschlüssel verfügen oder wenn Sie vergessen haben, Ihre AWS-Zugriffs-/Geheimschlüssel als Umgebungsvariablen einzugeben. 

Es wird Ihnen trotzdem gerne ein langes Passwort geben, ohne einen Fehler anzugeben. Die Meldung, die Sie von AWS erhalten, ist ein Ablauffehler und nicht eine korrektere und hilfreichere "Autorisierung falsch".

Hinweis: Verwenden Sie aws-cli Version 1.11.112.

0
Mike Biglan

Ich weiß, dass der Beitrag mit MacOS Sierra zusammenhängt, aber für diejenigen, die das Problem unter Windows haben, habe ich Folgendes ausgeführt:

1) aws ecr get-login, dieser Befehl gibt einen langen String aus

docker login -u AWS -p eyJwYXlsb2FkIjoiUXBnQ2FTV1B6Q1JqZGlH ..... . (Zum besseren Verständnis die ganze Zeile weggelassen) -e none https://xxxxxxx.dkr.ecr.us -east-1.amazonaws.com .

2) Kopieren Sie die obige Zeile und fügen Sie sie ein (vielleicht funktioniert keine, also entfernen Sie sie auch) . Die Ausgabe zeigt eine Warnung gefolgt von einem Erfolg: WARNUNG! Die Verwendung von --password über die CLI ist unsicher. Verwenden Sie --password-stdin Login erfolgreich

Wenn Sie eine sichere Methode verwenden müssen, verwenden Sie das --password-stdin

3) Jetzt können Sie den Image-Docker sicher verschieben. Drücken Sie xxxxxxx.dkr.ecr.us-east-1.amazonaws.com/ecfs-test

0429f33dd264: Pushed
48accfb13167: Pushed
f3bb6dd29c05: Pushed
e58ae65fa4eb: Pushed
3c6037fae296: Pushed
3efd1f7c01f6: Pushed
73b4683e66e8: Pushed
ee60293db08f: Pushed
9dc188d975fd: Pushed
58bcc73dcf40: Pushed
latest: digest: sha256:4354d137733c98a1bc8609d2d2f8e97316373904e size: 2404

Vielleicht funktioniert diese Lösung auch auf dem Mac.

0
hlopezvg

Das Problem ist, dass der Befehl aws ecr get-login ein Token abruft, das für eine angegebene Registrierung 12 Stunden lang gültig ist. Anschließend wird ein Docker-Anmeldebefehl mit diesem Berechtigungs-Token gedruckt, und wir führen diesen Befehl nicht aus, den wir zurückerhalten.

Wir müssen diesen gedruckten Befehl ausführen, um sich bei Docker in Ihrer Registry anzumelden. In meinem Fall verwende ich eval, um den gedruckten Befehl auszuführen, den ich vom aws ecr get-login so bekomme:

eval $ (aws ecr get-login - region eu-west-1 --profile)

0
umenon