カピバラ好きなエンジニアブログ

興味ある技術とか検証した内容を赴くままに書いていきます。カピバラの可愛さこそ至高。

aws ecr get-login-passwordでエラーが出たときの対処法

ローカルのPCからECRリポジトリにPushするときに毎回同じエラーに遭遇して、その度に調べているので備忘がてら残しておきます。

以下の記事の方が詳しく書いてあるので、詳細に見たい方はこちらをご覧ください。
qiita.com

実施作業

事象

ECRリポジトリにイメージをPushするときに、以下のコマンドで認証トークンの取得とDockerクライアントの認証をすると思います。

aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin XXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com



ある日普通にコマンドを実行しようとしたところ、以下のようなエラーが発生しました。

$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin XXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com
/usr/bin/docker-credential-desktop.exe: Invalid argument
Error saving credentials: error storing credentials - err: exit status 1, out: ``


原因

どうやら以下のファイルに認証情報が保存されており、credsStoreのパラメータに問題があるようです。

$ cat $HOME/.docker/config.json
{
  "auths": {
    "XXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com": {
      "auth": "ABC~~XYZ"
    }
  },
  "credsStore": "desktop.exe"
}


対応方法

根本解決になっていないかもしれませんが、credsStoreのパラメータを削除するだけでログインコマンドが実行可能になるようです。

$ cat $HOME/.docker/config.json
{
  "auths": {
    "XXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com": {
      "auth": "ABC~~XYZ"
    }
  }
}



無事ログインできました。

$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin XXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com

WARNING! Your password will be stored unencrypted in /home/dhanda/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded