Amazon Elastic Container Service (Amazon ECS) で EC2 タスクを起動すると、 「CannotPullContainerError」というエラーが表示されます。
簡単な説明
CannotPullContainerError は、次のいずれかの問題が原因で発生します。
- ネットワークが正しく設定されていないため、Amazon Elastic Compute Cloud (Amazon EC2) 起動タイプのタスクがイメージをプルできない。
- AWS Identity and Access Management (IAM) ロールに、イメージをプルするための適切なアクセス許可がない。
- DockerHub にダウンロード率の制限がある。
- イメージの名前またはタグが存在しない。
Amazon ECS タスクの開始に失敗するエラーをトラブルシューティングするには、AWSSupport-TroubleshootECSTaskFailedToStart ランブックを使用します。その後、問題に該当するトラブルシューティングのステップを参照します。
解決策
重要:
- ECS クラスターのリソースが配置されているのと同じ AWS リージョンで、AWSSupport-TroubleshootECSTaskFailedToStart ランブックを使用してください。
- ランブックを使用する際は、最近失敗したタスクの ID を使用する必要があります。失敗したタスクが Amazon ECS サービスの一部である場合は、サービス内で最後に失敗したタスクを使用してください。失敗したタスクは、オートメーション中に ECS:DescribeTasks で確認できる必要があります。デフォルトで、停止した ECS タスクは停止状態になってから 1 時間以内であれば確認できます。最近失敗したタスク ID を使用すると、オートメーション中にタスク状態のクリーンアップにより分析が中断するのを防ぐことができます。
ランブックを開始する方法については、「AWSSupport-TroubleshootECSTaskFailedToStart」を参照してください。オートメーションの出力に基づいて、次の手動のトラブルシューティングステップのいずれかを実行してください。
Amazon ECS コンテナインスタンスのネットワーク設定が正しくない
Amazon ECS コンテナインスタンスがインターネットに接続されていない場合、Amazon Elastic Container Registry (Amazon ECR) エンドポイントに到達できません。エンドポイントへの接続がないと、インスタンスはイメージをプルできません。ECS コンテナインスタンスがインターネットにアクセスできることを確認するには、次を行います。
IAM ロールにイメージをプルするための適切なアクセス許可がない
インスタンスプロファイルに関連付けられているインスタンス IAM ロールに、Amazon ECR リポジトリへのアクセス許可があることを確認します。
注: AWS 管理ポリシー AmazonEC2ContainerRegistryReadOnly では、イメージをプルするのに必要な最小限のアクセス許可が提供されます。
DockerHub でプル率の制限に達した
DockerHub からイメージをプルする際にプル率の制限に達した場合、次のエラーメッセージが表示されます。
「CannotPullContainerError: inspect image has been retried 5 time(s): httpReaderSeeker: failed open: unexpected status code https://registry-1.docker.io/v2/manifests/sha256:2bb501e6429 Too Many Requests - Server message: toomanyrequests:」
この問題を解決するには、「Amazon ECS で「CannotPullContainerError: You have reached your pull rate limit」エラーを解決するにはどうすればよいですか?」の手順を確認してください。
イメージの名前またはタグが存在しない
タスク定義で定義されている Amazon ECR でホストされているイメージまたはそれに関連するタグが存在しない場合、次のエラーが表示されます。
「Cannotpullcontainererror: pull image manifest has been retried 1 time(s): failed to resolve ref 123456789.dkr.ecr.ap-southeast-2.amazonaws.com/image-name:tag: 123456789**.dkr.ecr.ap-southeast-2.amazonaws.com/image-name:tag: not found**」
この問題を解決するには、タスク定義の [image] フィールドを確認します。対応するリポジトリと定義済みのタグが、プル元のコンテナレジストリに存在することを確認してください。
タスクが Amazon ECR 以外のレジストリからイメージを取得しており情報が不足している場合、別のエラーが表示されます。次のエラーは、イメージが存在しない場合、タグが存在しない場合、またはレジストリ認証情報が入力されていない場合に発生します。
「Cannotpullcontainererror: pull image manifest has been retried 1 time(s): failed to resolve ref docker.io/library/invalid-name:non-existenttag: pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed」
この問題を解決するには、タスク定義の [image] フィールドを確認します。イメージが対応するコンテナレジストリに存在することを確認してください。イメージが存在する場合は、正しい認証情報を入力していることを確認してください。詳細については、「タスクのプライベートレジストリの認証」を参照してください。