【小ネタ】ECRパブリックリポジトリでDockerクライアント認証がエラーになってしまう

ECRパブリックリポジトリはリージョン指定に気をつけようね!!
2021.09.16

こんにちは!コンサル部のinomaso(@inomasosan)です。

自分で作成したDockerイメージをECSで起動するために、AWSマネジメントコンソールにて東京リージョンでECRパブリックリポジトリを作成したのですが、Dockerクライアント認証でエラーとなったので原因を調べてみました。

環境

  • macOS Big Sur 11.6
  • AWS CLI 2.2.35
  • Docker Desktop 4.0.0

エラーメッセージ

AWS CLIでデフォルトプロファイル以外を使用するため、--profileオプションを指定しています。

% aws ecr-public get-login-password --profile hogehoge --region ap-northeast-1 | docker login --username AWS --password-stdin public.ecr.aws/xxxxxxx

Could not connect to the endpoint URL: "https://api.ecr-public.ap-northeast-1.amazonaws.com/"
Error: Cannot perform an interactive login from a non TTY device

先に結論から

ECRパブリックリポジトリが対応しているサービスエンドポイントは、バージニア北部(us-east-1)のみです。
2021/9/16時点で東京(ap-northeast-1)は対応しておりません。

何故にそんな勘違いしたの?

1つ目はAWSマネージメントコンソールにて、東京リージョンでECRパブリックリポジトリを作成できたように見えたことです。

ちなみにAWS CLIだとECRパブリックリポジトリ作成時に、東京(ap-northeast-1)を指定するとエラーになります。

% aws ecr-public create-repository --repository-name sample-repo --region ap-northeast-1 --profile hogehoge

Could not connect to the endpoint URL: "https://api.ecr-public.ap-northeast-1.amazonaws.com/"


2つ目はAWSマネージメントコンソールからプッシュコマンドの表示した場合のリージョン指定が東京(ap-northeast-1)だったからとなります。

もしかすると、将来的に東京(ap-northeast-1)リージョンもサービスエンドポイントに追加されるのかもしれません。

結局どうしたらいいの?

ECRパブリックリポジトリは、2021/9/16時点でバージニア北部(us-east-1)のみの対応となります。
AWS CLIのコマンド実行は--region us-east-1を指定しましょう。

ところでパブリックリポジトリにする必要あったの?

ECRをDocker Hubみたいに作ってみたかっただけです…
ちなみにプライベートリポジトリは、東京(ap-northeast-1)のサービスエンドポイントに対応しております。

まとめ

久々にハマったのでブログにしてみました。
どのみちECRにDockerイメージをプッシュするにはCLIが必須なので、リポジトリ作成もCLIで実施した方が良いかもしれません。

この記事が、どなたかのお役に立てば幸いです。それでは!