AWS CodeBuild を使用して、Docker Build の一部として ECR からイメージをプルしようとすると、認証情報の問題が発生します。
コンテキストについては、セットアップは次のとおりです。
Codebuild は、私たちが作成した内部 Docker ツールを呼び出しています。このツールは、docker ビルドを実行します。これを理解しやすくするコマンドの例:
../codebuild-templates/ourtoolscript docker -v
「ourtoolscript」は、一連の環境変数を設定し、最後に指定したコマンドで docker run を呼び出す単なる bash スクリプトです。
問題
このツール内で docker ビルドを実行しようとしています。ローカルで動作し、ビルドのために ECR からイメージをプルしない他のレポでも動作します。
これを行っているので、タグ付けのすべてのロジックとすべてがツール内のスクリプトであり、それをすべてのレポに適用するだけです。そのため、ツールの外部で docker build を実行すると言うのは、受け入れられる解決策ではありません。
docker ファイルが "FROM" の ECR からプルすると、次のエラーで失敗します。
time="2019-03-12T14:48:25Z" level=error msg="Error listing credentials" error="ecr: Failed to get authorization token: MissingRegion: could not find region configuration"
Get https://URLTOECRWITHTAG: no basic auth credentials
私が試したこと:
- https://docs.aws.amazon.com/codebuild/latest/userguide/troubleshooting.html#troubleshooting-versionsの手順を実行する
- 最初にツール内から docker pull を実行すると、うまくいきます。しかし、それは私たちが続けられることではありません
- ツールの外部で docker build を実行すると、機能します。
私が知っていること:
- CodeBuild が提供する資格情報は、問題なくツールに取り込まれています。問題なく引っ張ったり押したりできるので
- ECR イメージからビルドしていない場合は、問題なくビルドできます
- docker build がプルを行う方法と、単純な「docker pull」が機能する方法とでは何かが異なります
- 単純な「 docker build 」を実行すると。ツールの外部でビルド引数なし。それはうまくイメージを引き出します。したがって、これらの変数を使用して間違った道を進んでいると思います。
その他の情報:
私の docker build コマンド (いくつかの余分なものが削除されました):
docker build --build-arg AWS_DEFAULT_REGION=$AWS_DEFAULT_REGION --build-arg AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI --rm --build-arg REPO='xyz.dkr.ecr.xyz.amazonaws.com' -f Dockerfile .
Sending build context to Docker daemon 16.64MB