我在 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:檢查映像檔已重試 5 次:httpReaderSeeker:打開失敗:意外的狀態代碼 https://registry-1.docker.io/v2/manifests/sha256:2bb501e6429 太多請求 - 伺服器訊息:toomanyrequests:」
若要解決此問題,請參閱如何解決 Amazon ECS 中的錯誤「CannotPullContainerError: 您已達到您的提取率上限」?
映像檔名稱或標籤不存在
如果在任務定義中定義的 Amazon ECR 託管的映像檔或其關聯標籤不存在,您就會收到下列錯誤訊息:
「Cannotpullcontainererror:提取映象檔清單檔案已重試 1 次:未能解析參考 123456789.dkr.ecr.ap-southeast-2.amazonaws.com/image-name:tag: 123456789**.dkr.ecr.ap-southeast-2.amazonaws.com/image-name:tag: not found**」
若要解決此問題,請驗證任務定義中的映像檔欄位。確認對應的儲存庫和定義標籤存在於您要提取的容器登錄檔中。
如果您的任務從 Amazon ECR 以外的登錄檔提取映像檔,但缺少資訊,您就會收到不同的錯誤訊息。如果映像檔不存在、標籤不存在或未提供登錄檔憑證,就會發生下列錯誤:
「Cannotpullcontainererror:提取映像檔清單檔案已重試 1 次:無法解析參考 docker.io/library/invalid-name:拒絕提取存取權、儲存庫不存在或可能需要授權:服務器訊息:insufficient_scope:授權失敗」
若要解決此問題,請檢查任務定義中的映像檔欄位。確認映像檔存在於對應的容器登錄檔中。如果映像檔存在,請確定您提供了正確的憑證。如需詳細資訊,請參閱任務的私有登錄檔驗證。