我在 AWS Fargate 的 Amazon Elastic Container Service (Amazon ECS) 任務上收到「dockertimeouterror 無法過渡到開始;等待 3m0s 後逾時」錯誤。
簡短說明
當 Fargate 任務發生網路組態問題時,就會發生此錯誤。對於 Fargate,開始逾時的預設值為 3 分鐘。如果任務未在 3 分鐘內從擱置狀態翻轉到執行中狀態,則該任務會失敗並移至停止狀態。
如果您的 Fargate 任務在未設定 NAT 執行個體或閘道的私有子網路中執行,則您必須設定適當的 Amazon 虛擬私有雲端 (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 Secret Manager 和/或 AWS 系統管理員**:** 如果您在任務定義中參考秘密管理員秘密或系統管理員參數存放區參數,以便將敏感資料插入容器,則需要這些參數。您必須為秘密管理員或系統管理員建立介面 VPC 端點,以便這些任務可以連線到這些服務。您必須僅從託管敏感資料的特定服務 (秘密管理員或系統管理員) 建立端點。
- **Amazon CloudWatch:**當 Fargate 任務使用 awslog 作為日誌記錄驅動程序時,這是必需的。這是因為使用 awslog 做為記錄驅動程式的任務會將其記錄檔匯出到 CloudWatch。如果您使用 awslog,且已建立 CloudWatch 的 VPC 端點,但尚未設定,則您的任務無法到達端點。如果您收到下列錯誤: 「DockerTimeoutError: 不能過渡到已開始;等待 3m0s 後逾時。」
解決方法
檢查您的任務定義是否使用 awslogs 日誌記錄驅動程序
- 開啟 Amazon ECS 主控台。
- 在導覽窗格中,選擇任務定義。
- 選擇您的作業或服務所使用的作業定義,然後選擇您的作業定義名稱。
- 在任務定義的容器定義區段中,在容器名稱欄中選擇容器的展開器圖示。
- 在日誌組態子區段中,檢查日誌驅動器是否設為 awslogs。
**重要事項:**如果您的任務在沒有 NAT 閘道或 NAT 執行個體的私有子網路中執行,則必須使用 VPC 端點。
確認您具有用於 Fargate 任務的 VPC 端點
- 開啟 Amazon VPC 主控台。
- 在瀏覽窗格中,選擇端點服務。
- 檢查 com.amazonaws.regi.logs 在服務名稱欄位中是否存在。
如果端點不存在,則建立新端點。
如果端點確實存在,請確認端點是否與執行 Fargate 任務的 VPC 相同。若要在 VPC 主控台中執行此操作,請選擇端點,然後在端點的詳細資訊索引標籤中尋找 VPC ID。
如果端點未被與 Fargate 任務相同的 VPC 使用,請建立新端點。
如果端點與 Fargate 任務相同的 VPC 使用,請檢查與 VPC 關聯的安全性群組是否有以下內容:
- 安全性群組的輸入規則必須允許來自 Fargate 任務的連接埠 443 上的流量。
- 與 Fargate 任務相關聯的安全性群組必須具有輸出規則,才能將連接埠 443 上的流量傳送到 VPC 端點。
現在,您的 Fargate 任務可以到達您建立的 CloudWatch 端點。
相關資訊
Amazon ECR 介面 VPC 端點(AWS PrivateLink)