スキップしてコンテンツを表示

Amazon ECS タスク が Amazon ECR からイメージをプルできない場合の解決方法を教えてください。

所要時間2分
0

Amazon Elastic Container Service (Amazon ECS) タスクで、Amazon Elastic Container Registry (Amazon ECR) からイメージをプルできなかったり、「CannotPullContainerError: API エラー」というメッセージが表示されたりします。

簡単な説明

CannotPullContainerError は、次の原因で発生する場合があります。

  • インターネットへのルートがないプライベートサブネットを使用しているため、起動タイプが Amazon ECR エンドポイントにアクセスできない。
  • Amazon ECR リポジトリポリシーにより、リポジトリイメージへのアクセスが制限されている。
  • Amazon ECS のタスク実行またはインスタンスロールで、イメージをプルするための適切なアクセス許可が欠けている。
  • リクエストされたイメージ URI が存在しない。
  • ディスクにイメージを保存するための空き容量が不足している。
  • プルレートクォータを超過した。
  • タスクと Amazon ECR エンドポイントの間のネットワークパスが欠けている。
  • Docker の認証情報が期限切れとなっている。

解決策

問題の原因を特定する

AWSSupport-TroubleshootECSTaskFailedToStart ランブックを使用して問題を判断します。ランブックは、Amazon ECS クラスターリソースが配置されているリージョンと同じ AWS リージョンで実行する必要があります。さらに、最後に失敗したタスクの ID を使用します。失敗したタスクが Amazon ECS サービスに属している場合は、そのサービス内で最後に失敗したタスクを使用します。失敗したタスクは、オートメーション中に ECS:DescribeTasks で確認できる必要があります。デフォルトでは、停止した ECS タスクは Stopped 状態になってから 1 時間表示されます。

オートメーションの出力に基づいて、次の手動トラブルシューティング手順のいずれかを実行します。

プライベートサブネットに NAT ゲートウェイへのルートを確保するか、PrivateLink を使用します。

プライベートサブネットを使用することで、Amazon Elastic Compute Cloud (Amazon EC2) または AWS Fargate 起動タイプでタスクを実行できます。どちらの起動タイプでも、プライベートサブネットのルートテーブルには NAT ゲートウェイへのルートが必要です。リクエストをインターネットにルーティングするために、VPC の NAT ゲートウェイを設定します。

または、Amazon ECR 仮想プライベートクラウド (VPC) のエンドポイントと Amazon Simple Storage Service (Amazon S3) ゲートウェイのエンドポイントで AWS PrivateLink を使用します。

VPC エンドポイントのセキュリティグループでは、プライベートサブネットまたは Amazon ECS タスク VPC からの受信接続をポート 443 で許可する必要があります。

注: Windows では、ECS_IMAGE_PULL_INACTIVITY_TIMEOUT の値はデフォルトで 3 分に設定されています。大きなイメージをプルする場合、イメージの取り込みが 3 分以内に完了せず、リクエストがタイムアウトする可能性があります。

Amazon ECR リポジトリポリシーを確認する

Amazon ECR リポジトリポリシーによりリポジトリイメージへのアクセスが制限されている場合、403 Forbidden エラーが発生します。Amazon ECR リポジトリポリシーを参照し、リポジトリイメージに制限がないことを確認します。アクセスポリシーの例については、「Amazon ECR でのプライベートリポジトリポリシー例」を参照してください。

タスク実行またはコンテナインスタンスの IAM ロールのアクセス許可を確認する

Amazon EC2 起動タイプを使用する場合は、コンテナインスタンスの AWS Identity and Access Management (IAM) ロールに Amazon ECR リポジトリへのアクセス許可があることを確認してください。AmazonEC2ContainerRegistryReadOnly ポリシーは、イメージをプルするために最低限必要なアクセス許可を付与します。

Fargate 起動タイプを使用する場合は、イメージを取得するためのタスク実行ロールに AmazonECSTaskExecutionRolePolicy がアタッチされていることを確認してください。

正しいイメージ URI を使用していることを確認する

タスク定義のコンテナ定義セクションにある イメージパラメータを参照し、URI に指定したイメージ名が適切であることを確認します。

注: タグ別にプルするには、イメージ名形式に registry/repository[:tag] を使用します。ダイジェスト別に取得するには、Amazon ECR リポジトリから直接コピーできる registry/repository[@digest] 形式を使用します。

ディスク容量を確認する

プルしたイメージを保存するための十分なディスク容量がない場合、「CanNotPullContainerError: デバイスに空き容量がありません」というエラーメッセージが表示されます。この問題を解決するには、「write /var/lib/docker/tmp/GetImageBlob111111111: デバイスに空き容量がありません」を参照してください。

プルレートのクォータを超えているかどうかを確認する

イメージをプルするのに Docker Hub を使用しており、イメージのプルクォータを超えた場合、「CannotPullContainerError: toomanyrequests: プルレートの制限に達しました」というエラーメッセージが表示されます。プルレートのクォータに関する詳細は、Docker Docs のウェブサイトで「プルレート制限」を参照してください。この問題の解決方法については、「ERROR: toomanyrequests: リクエストが多すぎるか、プルレート制限に達しました」を参照してください。

ネットワーク設定を確認する

タスクと Amazon ECR エンドポイントの間にネットワークパスがない場合、次の例のようなエラーが表示されます。

Cannotpullcontainererror: デーモンでエラー応答発生

または、

ヘッダーの待機中に Client.Timeout が超過しました

この問題を解決するには、タスクが NAT ゲートウェイまたは PrivateLink 経由で Amazon ECR リポジトリにアクセスできるかどうかを確認します。

Amazon ECS サービスの作成時に、[ネットワーク] で次の設定を行います。

  • パブリックサブネット内のタスクでは、[パブリック IP][パブリック IP の自動割り当て] を有効にします。
  • プライベートサブネットのタスクでは、[パブリック IP の自動割り当て] を無効に設定し、NAT ゲートウェイまたは PrivateLink を設定します。

Docker のログイン認証情報を更新する

Docker 認証情報が期限切れの場合、「リポジトリが存在しないか、'docker login' が必要な可能性があります」というエラーメッセージが表示されます。プライベートリポジトリの認証用に Docker ログイン認証情報を更新する方法については、「認証トークンを使用する」を参照してください。

関連情報

Amazon ECS でタスクエラー CannotPullContainer が発生する

2コメント
  1. インスタンスと Fargate タスクにアタッチされたセキュリティグループが、次のアウトバウンドアクセスを許可していることを確認します。 HTTPS でポート 443、DNS で(UDP および TCP) ポート 53、サブネットのネットワークアクセスコントロールリスト (ネットワーク ACL)。

上記に対して質問です。 前提として、NATGatewayは使用していません。VPCエンドポイント、またそのセキュリティグループは正しく設定しています。fargateタスクはprivateサブネットで構築します。 コンテナイメージはプライベートレポジトリ(ECR)から取得します。

fargateタスクのセキュリティグループアウトバウンドにVPCエンドポイントのセキュリティグループへのHTTPS でポート 443、DNS で(UDP および TCP) ポート 53を許可しました。 しかしタスクは起動しません。 アウトバウンドで、0.0.0.0/0へHTTPS でポート 443、DNS で(UDP および TCP) ポート 53を許可したところ、タスクは起動しました。 fargateタスクのセキュリティグループのアウトバウンドをVPCエンドポイントのセキュリティグループ、またはVPC CIDRに限定することは不可能なのでしょうか?

応答済み 2年前

コメントをお寄せいただき、ありがとうございます。確認させていただいた後で、必要に応じて情報センターを更新いたします。

AWS
エキスパート
応答済み 2年前

関連するコンテンツ