Amazon Elastic Container Service (Amazon ECS) サービスを更新して、最新のイメージでタスクを実行しましたが、一部のタスクは新しいイメージを使用しません。Amazon ECS タスクが失敗し、CannotPullContainerError というエラーが発生する場合もあります。
簡単な説明
Amazon ECS でイメージを更新すると、次のエラーメッセージが表示される場合があります。
CannotPullContainerError: イメージ取得マニフェストを 1 回再試行しました: 次の参照を解決できませんでした。ref account-id.dkr.ecr.us-east-1.amazonaws.com/test:latest@sha256:1ed47f24455xxxxxxxxx677: account-id.dkr.ecr.us-east-1.amazonaws.com/test:latest@sha256:1ed47f24455xxxxxxxxx677: not found
イメージの更新時には、サービスも更新する必要があります。デフォルトでは、Amazon ECS はタスク定義で指定されたコンテナイメージタグをコンテナイメージダイジェストに解決します。
単一のタスクを実行して管理するサービスでは、Amazon ECS はそのタスクを使用してタスクコンテナのイメージダイジェストを確立します。複数のタスクを実行して管理するサービスでは、Amazon ECS はデプロイ中にサービススケジューラーが開始した最初のタスクを使用します。タスク定義のイメージタグを更新するときにイメージダイジェストを更新するには、サービスを更新し、[新しいデプロイの強制] 設定を使用します。
イメージの動作に関する詳細については、「コンテナイメージの解決」を参照してください。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
サービスで最新のイメージを使用する
サービスで最新のイメージを使用するには、Amazon ECS サービスを更新してから、[新しいデプロイの強制] オプションを使用します。または、次の AWS CLI コマンド update-service を実行します。
aws ecs update-service --cluster clustername --service servicename --force-new-deployment
注: お使いのものでそれぞれ、clustername をクラスター名に、servicename をサービス名に置き換えます。
特定のイメージダイジェストを使用するには、タスク定義を更新してから、[イメージ URI] セクションを変更します。
imageUri@imagedigest
"image": "accountid.dkr.ecr.region-name.amazonaws.com/image:latest@sha256:da04638bxxxxxxxxxx,"
「イメージダイジェストがありません」というエラーを解決する
イメージダイジェストがありませんというエラーが表示された場合は、イメージが削除済みかどうかを確認します。
イメージダイジェストが Amazon Elastic Container Registry (Amazon ECR) リポジトリ内にあるかどうかを確認するには、describe-images コマンドを実行します。
aws ecr describe-images --repository-name repositoryname --region regionname --query 'sort_by(imageDetails,& imagePushedAt)[*]'
注: お使いのものでそれぞれ、repositoryname をリポジトリ名に、regionname AWS リージョンに置き換えます。
コマンドの出力には、リポジトリ内のすべてのイメージが表示されます。イメージダイジェストが存在しない場合は、AWS CloudTrail イベント履歴を参照し、BatchDeleteImage でイメージが削除された原因を判断します。Amazon ECR ライフサイクルポリシーにより、実行中のタスクが使用するイメージが削除される可能性があるかどうかを判断するには、CloudTrail で PolicyExecutionEvent API コールを確認します。
コンテナイメージタグが変更されないようにするには、タグの不変性機能を有効にすることがベストプラクティスです。
注: CODE_DEPLOY または EXTERNAL デプロイコントローラーを使用するサービスでは、コンテナイメージタグは解決されません。
イメージダイジェストを更新するには、「サービスで最新のイメージを使用する」セクションの手順を実行します。
バージョンの一貫性を無効にする
一貫的なイメージではなく、LATEST などの変更可能なコンテナイメージタグを使用する必要がある場合があります。設定を構成するには、コンテナ定義を更新し、versionConsistency を disabled に設定します。デフォルトでは、versionConsistency は enabled に設定されています。値を disabled に変更すると、Amazon ECS はコンテナイメージタグをダイジェストに変換せず、コンテナ定義の元のイメージ URI を使用してデプロイします。
関連情報
Amazon ECS サービス用のソフトウェアバージョンの一貫性に関する発表