我在 AWS Fargate 的 Amazon Elastic Container Service (Amazon ECS) 任務上收到「dockertimeouterror 無法過渡到開始;等待 3m0s 後逾時」錯誤。
簡短說明
當 Fargate 任務發生網路組態問題時,就會發生此錯誤。如為 Fargate,開始逾時的預設值為 3 分鐘。如果任務未在 3 分鐘內從待處理狀態翻轉到執行中狀態,則該任務會失敗並移至已停止狀態。
如為在未設定 NAT 執行個體或閘道的私有子網路中執行的 Fargate 任務,請設定正確的 Amazon Virtual Private Cloud (Amazon VPC) 端點。您必須具有下列端點:
- **Amazon Elastic Container Registry (Amazon ECR):**從 ECR 儲存器提取映像必須使用此端點。
- **Amazon Simple Storage Service (Amazon S3):**由於 Amazon ECR 會使用 Amazon S3 儲存您的映像層,因此必須使用此端點。若要從 Amazon ECR 下載映像,容器必須存取 Amazon ECR 才能取得映像資訊清單,並存取 Amazon S3 才能下載映像層。
- **AWS Secrets Manager 和/或 AWS Systems Manager:**如果您參照任務定義中的 Secrets Manager 密碼或 Systems Manager Parameter Store 參數,則必須使用這些端點。您必須針對 Secrets Manager 或 Systems Manager 建立介面 VPC 端點,使這些任務可以連線至這些服務。您必須僅從託管敏感資料的特定服務 (Secrets Manager 或 System Manager) 建立端點。
- **Amazon CloudWatch:**當 Fargate 任務使用 awslogs 作為日誌記錄驅動程式時,必須使用此端點。使用 awslogs 作為日誌紀錄驅動程式的任務會將其日誌匯出至 CloudWatch。如果您使用 awslog,且已建立 CloudWatch 的 VPC 端點,但尚未啟用,則您的任務無法連線至該端點。如果您收到下列錯誤訊息: 「DockerTimeoutError: 不能過渡到已開始;等待 3m0s 後逾時。」
解決方法
檢查您的任務定義是否使用 awslogs 日誌記錄驅動程式
完成下列步驟:
- 開啟 Amazon ECS 主控台。
- 在導覽窗格中,選擇任務定義。
- 選擇您的作業或服務所使用的作業定義,然後選擇您的作業定義名稱。
- 在任務定義的容器定義區段中,於容器名稱資料欄中選擇容器的展開器圖示。
- 在日誌組態子區段中,檢查日誌驅動程式是否設定為 awslogs。
**重要事項:**如果您的任務在沒有 NAT 閘道或 NAT 執行個體的私有子網路中執行,則必須使用 VPC 端點。
確認您具有適用於 Fargate 任務的 VPC 端點
完成下列步驟:
- 開啟 Amazon VPC 主控台。
- 在瀏覽窗格中,選擇端點服務。
- 檢查 com.amazonaws.region.logs 是否存在於服務名稱欄。
如果端點不存在,請建立新的端點。
如果端點確實存在,請確認該端點是否與執行 Fargate 任務的 VPC 相同。若要在 VPC 主控台中執行此操作,請選擇端點,然後在端點的詳細資訊索引標籤中尋找 VPC ID。
如果端點未受到與 Fargate 任務相同的 VPC 使用,請建立新的端點。
如果端點受到與 Fargate 任務相同的 VPC 使用,請檢查與 VPC 相關聯的安全群組是否具有下列情況:
- 安全群組的輸入規則必須允許來自 Fargate 任務之連接埠 443 的流量。
- 與 Fargate 任務相關聯的安全群組必須具有輸出規則,才能將連接埠 443 的流量傳送至 VPC 端點。
相關資訊
Amazon ECR 介面 VPC 端點(AWS PrivateLink)