web-dev-qa-db-ja.com

Amazon ECRにイメージをプッシュできません - 「基本認証認証情報がありません」というメッセージが表示されて失敗する

DockerイメージをAmazon ECRレジストリにプッシュしようとしています。私はDockerクライアントDockerバージョン1.9.1、ビルドa34a1d5を使用しています。 dockerのログインクレジットを取得するには、 "aws ecr get-login --region us-east-1"を使用します。それから私は以下のようにそれらの信用でうまくログインしました:

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ユーザーが正しい許可を持っていることを確認しました。私はまた、リポジトリがそのユーザーにプッシュを許可していることを確認しました。これが問題にならないようにするために、すべてのユーザーにフルアクセスを許可するようにレジストリを設定しました。 「基本認証資格情報がない」というエラーが変更されることはありません。トラフィックはすべて暗号化されているため、これをデバッグする方法がわかりません。

UPDATE

だから私は私の問題の根本的な原因を理解したときに少しホーマーシンプソンD'Ohの瞬間がありました。複数のAWSアカウントにアクセスできます。 aws configureを使用して自分のリポジトリを設定したアカウントの認証情報を設定しましたが、aws cliは実際には環境変数AWS_ACCESS_KEY_IDおよびAWS_SECRET_ACCESS_KEYを使用していました。そのため、aws ecr get-loginを実行したときに、間違ったアカウントのログインを返していました。提案された答えのいくつかを試すために今すぐ戻るまで、アカウント番号が異なることに気付きませんでした。環境変数を削除すると、すべて正常に動作します。ストーリーのモットーは、このエラーが発生した場合は、ログインしているリポジトリが画像に適用したタグと一致していることを確認することです。

127
Alec Rooney

$(aws ecr get-login --region us-east-1)を実行すれば、すべて完了です。

85
Antonio Terreno

私の場合、これはDocker for WindowsおよびWindows Credential Managerのサポートに関するバグでした。

~/.docker/config.jsonを開き、"credsStore": "wincred"エントリを削除してください。

これにより、資格情報がconfig.jsonに直接書き込まれます。後でもう一度ログインする必要があります。

このバグは、GitHubのチケット #2291 および #24968 から追跡できます。

53
Der Hochstapler

プロファイルを使用する場合は、--profile=XXXaws ecr get-loginに渡すことを忘れないでください。

38
Greg

私もこの問題を抱えていました。私と一緒に起こったことは私が走った後私に返されたコマンドを実行するのを忘れていた

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

このコマンドは大きなBLOBを返しました。そこにはdocker loginコマンドがあります。わかりませんでした。これは次のようになるはずです。

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

このコマンドをコピーして貼り付けて&DockerのPushコマンドを実行します。

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

これはパーミッションを開かなくてもうまくいったはずです。ドキュメントを参照してください。 Private Registry Authentication

[編集:実際には、私は2回目のテストをするときも私はパーミッションの問題を抱えていた。 DockerからAWS ECRへのプライベートレポジトリが不正なJSONで失敗する )を参照してください。

それにもかかわらず、私は同じ問題を抱えていました。理由はわかりませんが、 get-authorization-token のドキュメントに記載されている、より長期にわたる認証メカニズムを使用しました。

AWS CLIとDockerのバージョン:

$ 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

認証トークン( 'docker password')を取得してください。

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

注:私の〜/ .aws/configは異なるデフォルト領域を指定しているので、私は明示的に--region us-east-1を設定する必要がありました。

対話的にログインします(############をAWSアカウント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>

画像をプッシュします(docker画像をtestにしたとします)。

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

試してみてください。

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

押す前に。

12
MrMins

それが誰にでも役立つなら...

私の問題は、資格情報ファイルから適切なプロファイルで認証するために--profileオプションを使用しなければならなかったことです。

次に、--region [region_name]コマンドを省略しました。これにより、 "no basic auth credentials"エラーも表示されます。

私のための解決策はこれから私のコマンドを変更することでした:

aws ecr get-login

これに:

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

例:

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

誰かに役立つことを願っています!

11
Lansana Camara

Windowsのwincred credential managerに既知のバグがあります。生成されたloginコマンドから「https://」を削除すると、これが解決します。

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

の代わりに

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

トラブルシューティングページ もご覧ください。

8
Tom Rijntjes

私は同じ問題を経験しました。

新しいAWS認証情報(アクセスキー)を生成し、新しい認証情報でAWS CLIを再設定することで問題を解決しました。

以前のaws ecr get-login --region us-east-1は、無効なECレジストリURLを含むdocker loginコマンドを生成しました。

8
temasso

私の場合は、aws ecr get-login --no-include-email --region *****を実行した後、そのコマンドの出力をdocker login -u *** -p ************の形式でコピーし、プロンプトに貼り付けました。推進は先に行きました。

5
Julien Nyambal
  1. 最初にECRレジストリを作成したことを確認してください。
    次に、ECRプッシュコマンドの説明に従って、次のコマンドをカットアンドペーストします。
  2. Docker loginコマンドを実行します(Mac/Linuxではevalはカットアンドペーストをスキップします)。
    eval $(aws ecr get-login --region us-east-1)
    複数のAWSアカウントを使用している場合は--profileを追加してください
    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

エラーが発生した場合は、すべてのコマンドをもう一度実行してくださいaws ecr get-loginを使用して取得した認証情報は一時的なものであり、期限が切れます。

5
Jason

AWSドキュメントには、次のコマンドを実行するように指示されています(ap-southeast-2 regionの場合)

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

この問題にぶつかったとき、そのドキュメントに基づいて、このコマンドの結果を端末に入力して実行する必要があることは明らかではありませんでした。

私のために働いた修正はでクリップボードに結果をコピーすることでした

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

結果をコマンドラインに貼り付けて実行します

4
Dan Groch

私はこの問題を別の原因で抱えていました。AWSアカウントに関連付けられていないレジストリ(クライアントのECRレジストリ)にプッシュする必要がありました。クライアントは、プリンシパルとして私のIAM ID(例:arn:aws:iam::{AWS ACCT #}:user/{Username})を追加することによって、レジストリの[アクセス許可]タブでアクセスを許可していました。私はいつもの手順でログインしようとしました:

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

もちろんどちらがno basic auth credentialsをもたらしました。 結局のところaws ecr get-loginはあなたをECRにログインさせますあなたのログインに関連するレジストリ、これは振り返ってみると意味があります。解決策は、どのレジストリにログインしたいかをaws ecr get-loginに伝えることです。

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

その後、docker Pushは問題なく動作します。

3
Jason Clark

このコマンドを実行した後:

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

出力からdocker loginコマンドを実行するだけです。

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

dockerがECRにログインする方法です。

3

私はこの問題に遭遇し、OSX上でも同様に実行しました。 Oliver Salzburgの応答を見て、私の〜/ .docker/config.jsonをチェックしました。それは私が持っている異なるAWSアカウントからの内部に複数の認証認証情報を持っていました。私はファイルを削除しました、そして再びget-loginを実行した後それはうまくいきました。

1
Minh Tran

私の問題は複数のAWS認証情報を持つことでした。デフォルトおよび開発者。私はdevにデプロイしようとしていたのでこれはうまくいきました:

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

Windows in PowerShellの場合は、次のように入力します。

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

私は同じ問題に直面し、私がした間違いは間違ったリポジトリパスを使用していたことです

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

上記のパスでこれが私がミスをしたところです:"dkr.ecr.us-east-1.amazonaws.com"の代わりに"west"。私は "east"を使用していました。私の間違いを直すと、画像をプッシュすることができました。

1
karthik vee

Aws-cliによって提供されたdockerコマンドは、ちょっとオフです...

Dockerログインを使用する場合、dockerはserver:というキーペアまたは〜/ .docker/config.jsonファイルのいずれかにserver:キーペアを保存します。

それがhttps://7272727.dkr.ecr.us-east-1.amazonaws.comの下にキーを保存すると、dockerは7272727.dkr.ecr.us-east-1.amazonaws.comではなくhttps://7272727.dkr.ecr.us-east-1.amazonaws.comという名前のサーバーを探すので、プッシュ中のキーの検索は失敗します。

次のコマンドを使ってログインします。

eval $(aws ecr get-login --no-include-email --region us-east-1 --profile yourprofile | sed 's|https://||')

コマンドを実行すると'Login Succeeded'メッセージが表示されますので、問題ありません。
その後、Pushコマンドは機能するはずです

1
Dakshin

FWIW、Debian 9、Dockerバージョン18.06.1-ce、ビルドe68fc7a:

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

1
Ligemer

次のコマンドは私のために働きます:

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

そして、私はこれらのコマンドを実行します。

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
1
Chirag Kalal

複数のプロファイルを使用していて、デフォルトのプロファイルではないプロファイルにログインする必要がある場合は、次のコマンドでログインする必要があります。

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

ステップ1で返されたものを実行するだけで問題は解決します。

0
SmallChess

私は地域のオプションを追加し、すべてが私のためにうまく動作します。

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

また、今日この問題に遭遇し、この記事で言及されていることをすべて試しました(AWS認証情報の生成を除く)。

我々はついにDockerをアップグレードすることによって問題を解決しました、そして、プッシュはうまくいきました。

この問題はDocker 1.10.xで発生し、Docker 1.11.xで解決されました。

お役に立てれば

0

aws ecr get-loginで正しい領域を使用していることを確認してください。これはリポジトリが作成された領域と一致している必要があります。

0
Lech Migdal

そのエラーメッセージはdockerから来ており、AWSを使用していないときにも同じエラーが発生するので必ずしもAWSに関連しているわけではありません。

私の場合は、テストで私はdirectory〜/ .dockerを削除してそのエラーを受け取りました...私が自分のローカルdockerレジストリをバウンスした後docker pushは大丈夫でした

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

このコマンドは私に正しいログインコマンドを与えます。 "--no-include-email"を使用しないと、別のエラーが発生します。上記のコマンドの出力は、このdocker login -u AWS -pのようになります。**********************非常に大きい******それをコピーして実行してください。これで「ログイン成功」と表示されます。これで画像をECRにプッシュできます。

あなたのAMIルールがあなたがログインしようとしたユーザーに対する許可を持っていることを確認してください。

0

正しい資格情報を使用してログインしたことを確認する必要があります。公式のエラーの説明を参照して、ここで確認してください

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

「基本認証なし」の修正はリンクに記載されています

0
suresh

これに対する回答をDockerフォーラムに投稿しました。私の場合、問題は、centos「docker」がDocker CEと同等ではないため、次のように失敗したことです。

基本認証なし

CentOSに「docker-ce」をインストールするだけで修正しました。

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

0
scooter

私の場合(そしておそらくすべての場合)、このエラーは複数のAWSアカウントを持っていることが原因でした。そのため、AWS ECRはawsアカウントに関連付けられた正しいaws認証情報を使用していません。

ここで述べた複数の解決策を試してみましたが、成功しませんでした。 ユーザー名とパスワードの代わりにトークンを使用した後に機能しました。私はそれをここの指示に従って動かしました。 https://btburnett.com/2017/01/docker-login-for-Amazon-aws-ecr-using-windows-powershell.html

AWSアカウントをCI/CD用に分離し、1つのECRリポジトリを複数のAWSアカウントで共有している場合は、手動で~/.docker/config.jsonを変更する必要があります。

これらの設定があるとしましょう。

  1. ECRはAWSアカウントID 00000000000000によって所有されています
  2. CIサーバーはAWSアカウントID 99999999999999によって所有されています

CIサーバー内でaws ecr get-login --region us-west-2 | bashを呼び出すと、dockerは~/.docker/config.jsonに一時的な認証情報を生成します。

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

しかし、あなたはECRのアカウントを指定したいので、あなたはホスト名を変更する必要があります。

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

この状況は、ECRアクセスを許可するためのIAMユーザー/ポリシーの形成方法に依存しています。

0
tomodian