Amazon ECS の「CannotPullContainerError: Error response from daemon:Get https://registry-name/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)」のエラーを解決するにはどうすればよいですか?
最終更新日: 2020 年 6 月 10 日
Amazon Elastic Container Service (Amazon ECS) でタスクを起動します。すると、「CannotPullContainerError: Error response from daemon:Get https://registry-name/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).」のエラーが表示されます。
このエラーの解決方法を教えてください。
簡単な説明
このエラーは、正しく設定されていないネットワークまたは断続的な接続が原因で、タスクがイメージのプルに失敗した場合に発生することがあります。
次の解決方法には、正しく設定されていないネットワークが原因で発生したエラーを解決する手順が含まれています。
解決方法
起動タイプに基づいて、Amazon Elastic Compute Cloud (Amazon EC2) または AWS Fargate のソリューションを選択します。
Amazon EC2 起動タイプ
- コンテナインスタンスがプライベートサブネットにある場合は、サブネットのルートテーブルにネットワークアドレス変換 (NAT) ゲートウェイがあることを確認します。
注意: NAT ゲートウェイの代わりに、AWS PrivateLink または HTTP プロキシを使用できます。エラーを回避するには、AWS PrivateLink または HTTP プロキシを正しく設定してください。 - コンテナインスタンスがパブリックサブネットにある場合は、インスタンスにパブリック IP アドレスがあることを確認します。サブネットのパブリック IPv4 アドレスの動作を編集して、起動時にパブリック IP をコンテナインスタンスに割り当てることができます。
- Amazon Virtual Private Cloud (Amazon VPC) で Amazon が提供する DNS を使用している場合は、インスタンスにアタッチされたセキュリティグループに HTTPS (ポート 443) に対するアウトバウンドアクセスが許可されていることを確認します。
- カスタム DNS を使用している場合は、ポート 53 で DNS (UDP および TCP)、ポート 443 で HTTPS へのアウトバウンドアクセスを許可していることを確認します。
- ネットワークアクセスコントロール (ネットワーク ACL) ルールがレジストリへのトラフィックをブロックしていないことを確認します。
Fargate 起動タイプ
- タスクの実行に使用されるサブネットのルートテーブルに、インターネットゲートウェイまたは NAT ゲートウェイへのルートがあることを確認します。
注意: インターネットゲートウェイまたは NAT ゲートウェイの代わりに、AWS PrivateLink を使用できます。エラーを回避するには、AWS PrivateLink または HTTP プロキシを正しく設定してください。 - パブリックサブネットでタスクを起動する場合は、Amazon EC2 コンソールでタスクを起動するときに、[自動割り当てパブリック IP] を [有効] にします。これにより、イメージを取得するためのアウトバウンドネットワークアクセスをタスクに付与できます。
- Amazon VPC で Amazon が提供する DNS を使用している場合は、インスタンスにアタッチされたセキュリティグループに HTTPS (ポート 443) に対するアウトバウンドアクセスが許可されていることを確認します。
- カスタム DNS を使用している場合は、ポート 53 の DNS (UDP および TCP) およびポート 443 での HTTPS アクセスに対してアウトバウンドアクセスが許可されていることを確認します。
- ネットワーク ACL ルールがレジストリへのトラフィックをブロックしていないことを確認します。