Amazon ECS での CannotPullContainer タスクエラー - Amazon Elastic Container Service

Amazon ECS での CannotPullContainer タスクエラー

次のエラーは、Amazon ECS が指定されたコンテナイメージを取得できないためにタスクを開始できなかったことを示しています。

注記

1.4 Fargate プラットフォームバージョンでは、長いエラーメッセージが切り捨てられます。

The task can’t pull the image. ロールにレジストリからイメージをプルするためのアクセス許可があることを確認します。

このエラーは、アクセス許可の問題により、タスク定義で指定されたイメージをタスクがプルできないことを示します。エラーメッセージには、問題の原因となっているイメージまたはロールに関する追加の情報が含まれます。

「Error response from daemon: pull access denied for repository does not exist or may require 'docker login': denied: User: roleARN is not authorized to perform: ecr:BatchGetImage on resource: image because no identity-based policy allows the ecr:BatchGetImage action.」

この問題を解決するには。

  1. イメージがリポジトリに存在することを確認します。イメージの表示の詳細については、「Amazon Elastic Container Registry ユーザーガイド」の「Viewing image details in Amazon ECR」を参照してください。

  2. role-arn にイメージをプルするための正しいアクセス許可があることを確認します。

    ロールを表示および修正する方法については、「AWS Identity and Access Management ユーザーガイド」の「ロールの修正」を参照してください。

    タスクには次のいずれかのロールを使用します。

The task can’t pull the image. Check your network configuration

このエラーは、タスクが Amazon ECR に接続できないことを示します。

これらの問題を検証および解決する方法の詳細については、「Amazon ECS の停止したタスクの接続を検証する」を参照してください。

API error (500): Get https://111122223333.dkr.ecr.us-east-1.amazonaws.com/v2/: net/http: request canceled while waiting for connection

このエラーは、インターネットへのルートがないため、接続がタイムアウトしたことを示します。

この問題を解決するには、以下ができます。

  • パブリックサブネットのタスクでは、タスクの起動時に [Auto-assign public IP] (自動割り当てパブリック IP)を [ENABLED] (有効)に指定する必要があります。詳細については、「Amazon ECS タスクとしてのアプリケーションの実行」を参照してください。

  • プライベートサブネットのタスクでは、タスク起動時に [Auto-assign public IP] (自動割り当てパブリック IP) を [DISABLED] (無効) に指定し、VPC の NAT ゲートウェイを設定してリクエストをインターネットにルートします。詳細については、Amazon VPC ユーザーガイドNAT ゲートウェイ を参照してください。

API エラー

このエラーは、Amazon ECR エンドポイントとの接続に問題があることを示します。

この問題を解決する方法については、AWS Support ウェブサイトの「Amazon ECS の Amazon ECR エラー "CannotPullContainerError: API error" を解決するには」を参照してください。

write /var/lib/docker/tmp/GetImageBlob111111111: no space left on device

このエラーは、ディスク容量が不足していることを示しています。

この問題を解決するには、ディスク容量を解放します。

Amazon ECS 最適化 AMI を使用している場合は、次のコマンドを使用してファイルシステムで 20 個の最大ファイルを取得できます。

du -Sh / | sort -rh | head -20

出力例:

5.7G    /var/lib/docker/containers/50501b5f4cbf90b406e0ca60bf4e6d4ec8f773a6c1d2b451ed8e0195418ad0d2
1.2G    /var/log/ecs
594M    /var/lib/docker/devicemapper/mnt/c8e3010e36ce4c089bf286a623699f5233097ca126ebd5a700af023a5127633d/rootfs/data/logs
...

場合によっては、実行中のコンテナによってルートボリュームがいっぱいになる可能性があります。コンテナが max-size 制限のないデフォルトの json-file ログドライバーを使用している場合、ログファイルが使用されているスペースの大半を占めている可能性があります。docker ps コマンドを使用して、上記の出力からコンテナ ID にディレクトリ名をマッピングすることによって、どのコンテナが容量を使用しているかを確認します。例:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 50501b5f4cbf amazon/amazon-ecs-agent:latest "/agent" 4 days ago Up 4 days ecs-agent

デフォルトでは、json-file ログドライバーを使用する場合、Docker はすべてのコンテナの標準出力 (および標準エラー) をキャプチャし、JSON 形式を使用してファイルに書き込みます。ログドライバーオプションとして max-size を設定できます。これにより、ログファイルの容量が大きくなりすぎるのを防ぐことができます。詳細については、Docker ドキュメントの「ロギングドライバーの設定」を参照してください。

このオプションの使用方法を示すコンテナ定義のスニペットを次に示します。

{ "log-driver": "json-file", "log-opts": { "max-size": "256m" } }

コンテナログのディスク容量使用量が大きすぎる場合、awslogs ログドライバーを使用することもできます。awslogs ログドライバーがログを CloudWatch に送信します。これによりコンテナインスタンスのコンテナログに使用されるディスク容量が解放されます。詳細については、「Amazon ECS ログを CloudWatch に送信する 」を参照してください。

ERROR: toomanyrequests: Too Many Requests or You have reached your pull rate limit.

このエラーは、Docker Hub のレート制限があることを示します。

次のエラーのいずれかが表示された場合は、Docker Hub のレート制限に達している可能性があります。

Docker Hub のレート制限の詳細については、[Understanding Docker Hub rate limiting] (Docker ハブのレート制限を理解する) を参照してください。

Docker Hub のレート制限を上げ、コンテナインスタンスの Docker プルを認証する必要がある場合は、「Private registry authentication for container instances」を参照してください。

Error response from daemon: Get url: net/http: request canceled while waiting for connection

このエラーは、インターネットへのルートがないため、接続がタイムアウトしたことを示します。

この問題を解決するには、以下ができます。

  • パブリックサブネットのタスクでは、タスクの起動時に [Auto-assign public IP] (自動割り当てパブリック IP)を [ENABLED] (有効)に指定する必要があります。詳細については、「Amazon ECS タスクとしてのアプリケーションの実行」を参照してください。

  • プライベートサブネットのタスクでは、タスク起動時に [Auto-assign public IP] (自動割り当てパブリック IP) を [DISABLED] (無効) に指定し、VPC の NAT ゲートウェイを設定してリクエストをインターネットにルートします。詳細については、Amazon VPC ユーザーガイドNAT ゲートウェイ を参照してください。

ref pull has been retried 1 time(s): failed to copy: httpReaderSeeker: failed open: unexpected status code

このエラーは、イメージのコピー時に問題があったことを示します。

この問題を解決するには、次のいずれかの記事を確認してください。

pull access denied

このエラーは、イメージにアクセスできないことを示します。

この問題を解決するには、Amazon ECR で Docker クライアントを認証する必要がある場合があります。詳細については、Amazon ECR ユーザーガイドの「プライベートレジストリ認証」を参照してください。

pull command failed: panic: runtime error: invalid memory address or nil pointer dereference

このエラーは、メモリアドレスが無効であるか、ポインターデリファレンスが nil であるため、イメージにアクセスできないことを示しています。

この問題を解決するには。

  • Amazon S3 に到達するためのセキュリティグループのルールがあることを確認してください。

  • ゲートウェイエンドポイントを使用するときは、エンドポイントにアクセスするためのルートをルートテーブルに追加する必要があります。

error pulling image conf/error pulling image configuration

このエラーは、レート制限に達したか、ネットワークエラーが発生したことを示します。

この問題を解決するには、「Amazon ECS EC2 起動タイプタスクで CannotPullContainerError エラーを解決する方法」を参照してください。

コンテキストがキャンセルされました

このエラーは、コンテキストがキャンセルされたことを示しています。

このエラーの一般的な原因は、タスクが使用している VPC にコンテナイメージを Amazon ECR から取得するルートがないためです。