Docker イメージを Amazon ECR レジストリにプッシュしようとしています。Docker クライアント Docker バージョン 1.9.1、ビルドを使用していますa34a1d5
。これを使用して、aws ecr get-login --region us-east-1
Docker ログイン認証情報を取得します。次に、次のようにして、それらの認証情報を使用して正常にログインします。
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
しかし、イメージをプッシュしようとすると、次のエラーが発生します。
$ 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
aws ユーザーに適切な権限があることを確認しました。また、リポジトリがそのユーザーにプッシュを許可していることも確認しました。問題がないことを確認するために、すべてのユーザーにフル アクセスを許可するようにレジストリを設定しました。"no basic auth credentials"
エラーは変わりません。すべてのトラフィックが暗号化されているため、これをデバッグする方法がわかりません。
アップデート
それで、問題の根本原因に気づいたとき、ちょっとしたホーマー・シンプソンの「D'Oh」のような瞬間がありました。私は複数の AWS アカウントにアクセスできます。aws configure
リポジトリを設定したアカウントの認証情報を設定するために を使用していたにもかかわらず、aws cli は実際には環境変数とを使用していましたAWS_ACCESS_KEY_ID
。AWS_SECRET_ACCESS_KEY
そのため、そうするとaws ecr get-login
間違ったアカウントのログインが返されました。提案された回答のいくつかを試すために今戻ってみるまで、アカウント番号が異なることに気付きませんでした。環境変数を削除すると、すべてが正しく機能します。このエラーが発生した場合は、ログインしているリポジトリがイメージに適用したタグと一致していることを確認する、というのがこの話のモットーだと思います。
ベストアンサー1
走れば$(aws ecr get-login --region us-east-1)
全て完了します
2021年7月更新:
get-login
は、AWS CLI バージョン 1 では廃止されました。AWS CLI バージョン 2 を使用している場合は、 を使用する必要がありますget-login-password
。
出力をget-login-password
docker login コマンドにパイプして、ECR レジストリに対して docker を認証できます。
aws ecr get-login-password | docker login --username AWS --password-stdin ####.dkr.ecr.us-east-1.amazonaws.com
これで、docker push
ECR レジストリに直接送信できるようになります。