Aws-cliを使用して、ドッカーイメージをAWS ECRリポジトリにプッシュしようとしています。
get-login
コマンドを実行するだけですlogin succeeded
を返します)denied: Your Authorization Token has expired. Please run 'aws ecr get-login' to fetch a new one.
何が間違っているのかわかりません。正しいリポジトリにプッシュしています。Macの時刻は正しいです。これは以前は機能していましたが、Macを再インストールしてmacOS Sierraにアップグレードしたため、機能しなくなったため、おそらくそれに関連しています。
私のaws --version
出力:
aws-cli/1.11.34 Python/2.7.10 Darwin/16.3.0 botocore/1.4.91
実行したコマンドの完全な出力:
$ 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.
上記のどちらのソリューションも機能しませんでしたが、ecr loginコマンドで領域を設定すると機能することがわかりました。
aws ecr get-login --region us-west-2
コマンドを実行しているだけで、そのコマンドから端末にエコーアウトされたコマンドを貼り付けていない可能性があります。簡単な間違い。実行したら:
aws ecr get-login --no-include-email --region us-east-1
実行する別のコマンドを出力します。完全に認証するには、そのコマンドをコピーして端末で実行する必要があります。
または、次のコマンドを使用して、エコーされたコマンドをシェルにパイプで戻すだけの簡単なショートカットがあります。aws ecr get-login --no-include-email --region us-east-1 | sh
Dockerの最新バージョンは、新しい資格情報ストレージ機能を使用します。これは、 バグがあります プロトコルを指定するURLでdocker login
を実行すると、トークンの有効期限エラーが発生します。この問題はDocker 1.13で修正される予定です。
とりあえず、回避策は、プロトコルを指定せずにログインコマンドを実行することです。
したがって、aws ecr get-login
によって返されるコマンドblobでは:
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 1234567890.dkr.ecr.eu-west-1.amazonaws.com
https://
を省略すると、当分の間はdockerが動作するはずです。
〜/ .aws/credentials(OSに応じたパス)に複数の資格情報があり、-pフラグの追加を忘れると、「承認トークンの有効期限が切れました」というメッセージも表示されます。
ログインを取得するには、次のコマンドを使用します。
aws ecr get-login --region eu-west-1 -p <yourprofilename>
Linux Mint 18.1(Ubuntu 16.04)でAWS ECRと最新の Python Dockerクライアント 2.5.1を介して使用される最新のDocker 17.06.1-ceで同じ問題が発生しました。ログインは機能しましたが、プッシュは失敗しました。
~/.docker/config.json
の削除が役立ちました。おそらく古いトークンのみが含まれていました。
基盤となるOSとは関係ないと思います。私の場合、以前は機能していましたが、思い出すことができる唯一の変更は、Ubuntuリポジトリのdocker.io 1.12
からDockerリポジトリのdocker-ce 17.06
へのアップグレードでした。
12時間ごとに認証トークンを更新する必要があります。
$(aws ecr get-login --no-include-email --region us-east-1)
-設定に従って地域を変更
私はevalを使って運が良かった。例えば、
$ aws ecr get-login --region us-east-1 --no-include-email --profile username_env
うまくいきませんでした。
$ eval $(aws ecr get-login --region us-east-1 --no-include-email --profile username_env)
うまくいきました。
私も同じエラーを取得していました、以下は私が試した解決策であり、動作しています:1.コマンドを実行します:aws ecr get-login --no-include-email --region ap-southeast-1( 2. Docker login -u AWS -p xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx == https://youraccountid.dkr.ecr.ap-southeast-1.amazonaws.com のような出力が表示されます。
「https://」を削除してから、コマンドをdocker login -u AWS -p xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx == youraccountid.dkr.ecr.ap-southeast-1.amazonaws.comとして実行します
そしてそれは機能し、画像をプッシュすることができます。
私の場合、問題は〜/ .aws/credentailsにある複数のクレデンシャルであったため、--profileを使用しました
aws ecr get-login --no-include-email --region us-east-2 --profile xxxx
これは私のために働いた。
Mac用の安定版のdockerを使用していました_Version 1.12
_
ベータ版Version 1.13.0-rc4-beta34.1 (14853)
にアップグレードしたところ、すべて正常に機能するようになりました。
したがって、同じ問題を抱える人がいる場合は、Macバージョン1.13以降のdockerを使用してください。1.13がまだリリースされていない場合は、ベータ版に切り替えてください。
これは、別のAWSアカウントのレジストリからプッシュ/プルしようとしたときに発生しました。 get-login
フラグを指定して--registry-ids
を実行し、ログインしたいレジストリのIDを渡す必要がありました。
警告: aws ecr get-login
は、AWSサーバーに接続していないようで、AWSアクセス/シークレットキーが正しくない場合や、AWSアクセス/シークレットキーを環境変数として入力するのを忘れた場合でも機能しているようです。
エラーを出さずに長いパスワードを喜んで提供します。したがって、AWSから取得するメッセージは、より正確で有用な「承認が正しくありません」ではなく、有効期限エラーです。
注:aws-cliバージョン1.11.112を使用
投稿がMacOS Sierraに関連していることは知っていますが、Windowsで問題がある人のために、以下を実行しました。
1)aws ecr get-login、このコマンドは長い文字列を出力します
docker login -u AWS -p eyJwYXlsb2FkIjoiUXBnQ2FTV1B6Q1JqZGlH .....。(理解を深めるために行全体を省略) -e none https://xxxxxxx.dkr.ecr.us-east -1.amazonaws.com 。
2)上記の行をコピーして貼り付けてください(おそらく-e noneは動作しないので、それも削除してください)。出力には、警告とそれに続く成功が表示されます:WARNING! CLIを介した--passwordの使用は安全ではありません。 --password-stdin Login Succeededを使用します
安全な方法を使用する必要がある場合は、-password-stdinを使用します
3)これで、イメージを安全にプッシュできます-docker Push 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
たぶん、このソリューションはMacでも動作します。
問題は、aws ecr get-loginコマンドが指定されたレジストリに対して12時間有効なトークンを取得し、その承認トークンを使用してdockerログインコマンドを出力し、取得したコマンドを実行していないためです。
この印刷されたコマンドを実行して、Dockerでレジストリにログインする必要があります。私の場合、evalを使用して、次のようにaws ecr get-loginから返される印刷コマンドを実行しています。
eval $(aws ecr get-login --region eu-west-1 --profile)