我的 AWS Batch 運算環境中的工作失敗,並傳回下列錯誤: 「DockerTimeoutError: 無法轉移至已建立;等待 4m0s 後逾時。」 我想對錯誤進行疑難排解。
簡短說明
如果您的 Docker start 和 Docker create API 呼叫花費的時間超過 4 分鐘,則 AWS Batch 傳回 DockerTimeoutError 錯誤。
**注意:**Amazon Elastic Container Service (Amazon ECS) 容器代理程式設定的預設逾時限制為 4 分鐘。
以下原因最常引起此錯誤:
- AWS Batch 運算環境的 ECS 執行個體磁碟區承受佇列中所有其他工作的高 I/O 壓力。這些工作會耗盡突發平衡。
- 清理已停止的 ECS 容器的速度不夠快,無法釋放 Docker 常駐程式。如果您使用自訂 Amazon Machine Image (AMI) 而不是 AWS Batch 提供的預設 AMI,則可能會遇到 Docker 問題。
如果這些問題都不是造成錯誤的原因,則可以執行下列動作進一步對此問題進行疑難排解:
解決方法
解決突發平衡問題
檢查 ECS 執行個體的突發平衡
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱 AWS CLI 錯誤疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
請完成下列步驟:
- 開啟 Amazon ECS 主控台。
- 在導覽窗格中,選擇叢集。然後,選擇包含工作的叢集。
**注意:**叢集名稱以運算環境的名稱開頭,後接 _Batch_ 及數字和字母的隨機雜湊。
- 選擇基礎架構標籤。
- 從基礎架構欄的容器執行個體列下方,選擇您的執行個體 ID。
**注意:**若要尋找失敗工作的執行個體 ID,請執行 AWS Batch describe-jobs AWS CLI 命令。執行個體 ID 會顯示在 containerInstanceArn 的輸出中。
- 在 Amazon EC2 主控台中,確定執行個體仍然是選中的。然後在儲存區段中,選擇磁碟區 ID 的連結。
- 在區塊型儲存設備快顯視窗中,對於磁碟區 ID,選取您的磁碟區。
- 選擇監控標籤。然後,選擇突發平衡以檢查您的突發平衡指標。如果您的突發平衡降到 0,則表示您的突發平衡已耗盡。
為您的受管運算環境建立啟動範本
**注意:**如果您變更啟動範本,則必須建立新的運算環境。
請完成下列步驟:
- 開啟 Amazon EC2 主控台,然後選擇啟動範本。
- 選擇建立啟動範本。
- 對於 AMI ID,選取預設的 Amazon ECS 最佳化 AMI。
- 在儲存 (磁碟區) 區段中,從磁碟區類型欄位中選擇磁碟區類型。然後,在大小 (GiB) 欄位中輸入整數值。
**注意:**如果為磁碟區類型選擇](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html#vol-type-ssd)佈建 IOPS SSD (io1)[,請輸入 IOPS 允許的整數值。
- 選擇建立啟動範本。
- 使用新的啟動範本建立新的受管運算環境。
使用您的 AMI 建立 AWS Batch 運算環境
**注意:**如果您變更 AMI,則必須建立新的運算環境,因為無法更新 AMI ID 參數。
請完成下列步驟:
- 開啟 Amazon EC2 主控台。
- 選擇啟動執行個體。
- 依照設定精靈中的步驟建立您的執行個體。
重要事項:在新增儲存頁面上,修改執行個體的磁碟區類型或大小。磁碟區越大,基準效能越高,且磁碟區補充突發平衡的速度也越慢。若要取得高 I/O 負載的較佳效能,請將磁碟區變更為 io1 類型。
- 從執行個體建立運算資源 AMI。
- 為包含您的 AMI ID 的 AWS Batch 建立運算環境。
解決 Docker 問題
依預設,Amazon ECS 容器代理程式會自動清除已停止的工作和容器執行個體未使用的 Docker 映像檔。如果您使用新映像檔執行新工作,則容器儲存空間可能會填滿未使用的 Docker 映像檔。AWS Batch 的預設 AMI 可最佳化您的 Amazon ECS 清理設定。
請完成下列步驟:
- 對您的 AWS Batch 運算環境使用 SSH 連線到容器執行個體。
- 若要檢查 Amazon ECS 容器代理程式,請執行 inspect ecs-agent Docker 命令。然後,檢閱輸出中的 env 部分。
**注意:**若要加快任務和映像清理速度,請減小下列變數的值:
ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION
ECS_IMAGE_CLEANUP_INTERVAL
ECS_IMAGE_MINIMUM_CLEANUP_AGE
ECS_NUM_IMAGES_DELETE_PER_CYCLE
您也可以對自動工作和映像清理使用可調整參數。
- 使用更新的值建立新的 AMI。
-或-
使用包含新環境變數的使用者資料建立啟動範本。
使用更新的值建立新的 AMI
請完成下列步驟:
- 在 /etc/ecs/ecs.config 檔案中設定您的代理程式組態參數。
- 重新啟動容器代理程式。
- 從執行個體建立運算資源 AMI。
- 為包含您的 AMI ID 的 AWS Batch 建立運算環境。
使用包含新環境變數的使用者資料建立啟動範本
請完成下列步驟:
-
使用使用者資料建立啟動範本。
例如,下列 MIME 分段檔案中的使用者資料會覆寫運算資源的預設 Docker 映像清理設定:
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="
--==MYBOUNDARY==
Content-Type: text/x-shellscript; charset="us-ascii"
#!/bin/bash
echo ECS_IMAGE_CLEANUP_INTERVAL=60m >> /etc/ecs/ecs.config
echo ECS_IMAGE_MINIMUM_CLEANUP_AGE=60m >> /etc/ecs/ecs.config
--==MYBOUNDARY==--
如需 MIME 多部分檔案的詳細資訊,請參閱 cloud-init 網站上的 MIME 多部分檔案。
-
使用新的啟動範本建立受管運算環境。
相關資訊
發佈 CloudWatch 指標的 AWS 服務
運算資源 AMI
GitHub 網站上的 amazon-ecs-agent