如果我使用 Amazon Elastic Container Registry (Amazon ECR) 提取映像檔,我會收到以下錯誤訊息: "CannotPullContainerError: API error" (CannotPullContainerError: API 錯誤)
簡短說明
基於下列其中一個問題,您可能會收到此錯誤:
- 您的啟動類型無法存取 Amazon ECR 端點
- 您的 Amazon ECR 儲存庫政策限制存取儲存庫映像檔
- 您的 AWS Identity and Access Management (IAM) 角色沒有提取或推送映像檔的正確權限
- 找不到映像檔
- 您的 Amazon Virtual Private Cloud (Amazon VPC) 閘道端點政策拒絕 Amazon Simple Storage Service (Amazon S3) 存取
若要提取映像檔,Amazon ECS 必須與 Amazon ECR 端點通訊。
若要疑難排解無法啟動 Amazon ECS 任務的錯誤,請使用 AWSSupport-TroubleshootECSTaskFailedToStart 執行手冊。然後,請參閱針對問題的相關疑難排解步驟。
解決方案
重要事項:
- 在 ECS 叢集資源所在的相同 AWS 區域中使用 AWSSupport-TroubleshootECSTaskFailedToStart 執行手冊。
- 使用執行手冊時,您必須使用最近失敗的任務 ID。如果失敗的任務屬於 Amazon ECS 服務,請在服務中使用最近失敗的任務。失敗的任務必須在 ECS:DescribeTasks 自動化過程中可見。依預設,停止的 ECS 任務會在進入已停止狀態後顯示 1 小時。使用最近失敗的任務 ID 可防止任務狀態清除作業在自動化期間中斷分析。
如需有關如何啟動執行手冊的說明,請參閱 AWSSupport-TroubleshootECSTaskFailedToStart。根據自動化的輸出,使用下列其中一個手動疑難排解步驟。
您的啟動類型無法存取 Amazon ECR 端點
1. 您可能正在使用 Amazon Elastic Compute Cloud (Amazon EC2) 啟動類型執行任務,而您的容器執行個體位於私有子網路中。或者,您可能正在私有子網路中使用 AWS Fargate 啟動類型執行任務。在上述任一情況下,請確認您的子網路在路由表中具有通往 NAT 閘道的路由。
2. 如果您的任務具有 EC2 啟動類型,且容器執行個體位於公有子網路中,則執行個體必須具有公用 IP 地址。
- 或 -
如果您正在公有子網路中使用 Fargate 啟動類型執行任務,請在您啟動任務時選擇已啟用以自動指派公有 IP。這可讓您的任務具備傳出網路存取權以提取映像檔。
3. 在您的 VPC 中設定 NAT 閘道,以將請求路由至網際網路。
**注意事項:**您可以使用 AWS PrivateLink 作為 NAT 閘道的替代方案。
4. 如果您正在使用 AWS PrivateLink for Amazon ECR,請檢查與 Amazon ECR VPC 端點相關聯的安全群組組態。您必須允許來自 VPC CIDR、容器執行個體或 Fargate 任務或服務的安全群組內透過 HTTPS (連接埠 443) 的傳入流量。
5. 確認連接至執行個體和 Fargate 任務的安全群組允許下列傳出存取權: 連接埠 443 上的 HTTPS、連接埠 53 上的 DNS (UDP 和 TCP),以及您子網路的網路存取控制清單 (network ACL)。
您的 Amazon ECR 儲存庫政策限制存取儲存庫映像檔
檢查您的 Amazon ECR 儲存庫政策,了解存取儲存庫的限制。下列儲存庫政策範例允許 IAM 使用者推送和提取映像檔:
{ "Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowPushPull",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::123456789012:user/push-pull-user-1",
"arn:aws:iam::123456789012:user/push-pull-user-2"
]
},
"Action": [
"ecr:GetDownloadUrlForLayer",
"ecr:BatchGetImage",
"ecr:BatchCheckLayerAvailability",
"ecr:PutImage",
"ecr:InitiateLayerUpload",
"ecr:UploadLayerPart",
"ecr:CompleteLayerUpload"
]
}
]
}
您的 IAM 角色沒有提取映像檔的正確權限
如果您使用 EC2 啟動類型執行任務,請檢查與執行個體設定檔相關的執行個體 IAM 角色權限。必須具有存取 Amazon ECR 儲存庫的權限。
**注意事項:**AWS 受管政策 AmazonEC2ContainerRegistryReadOnly 提供提取映像檔所需的最低權限。
如果您正在使用 Fargate 啟動類型執行任務,請確認 AmazonECSTaskExecutionRolePolicy 具備所需權限。
找不到映像檔
若要確認 URI 中的正確映像檔名稱,請檢查任務定義中容器定義區段的映像檔參數。
**注意事項:**若要按標籤提取,請使用以下映像檔名稱格式:registry/repository[:tag]。若要按摘要提取,請使用 registry/repository[@digest] 格式。
您的 Amazon VPC 閘道端點政策拒絕 Amazon S3 存取
如果您在路由表中具備適用於 Amazon S3 的 Amazon VPC 閘道端點的路由,請完成以下步驟:
1. 驗證 Amazon VPC 閘道端點的存取政策。
2. 確認 Amazon VPC 閘道端點具備存取 S3 儲存貯體的正確政策。
相關資訊
CannotPullContainer 任務錯誤