如何解決 AWS Batch 中的「DockerTimeoutError」錯誤?

2 分的閱讀內容
0

我的 AWS Batch 運算環境中的工作失敗,並傳回下列錯誤: 「DockerTimeoutError: 無法轉移至已建立;等待 4m0s 後逾時。」 如何對 AWS Batch 中的「DockerTimeoutError」錯誤進行疑難排解?

簡短描述

如果您的 docker startdocker create API 呼叫花費的時間超過四分鐘,則 AWS Batch 傳回 DockerTimeoutError 錯誤。

**注意:**Amazon Elastic Container Service (Amazon ECS) 容器代理程式設定的預設逾時限制為四分鐘。

發生該錯誤的原因很多,但通常是由下列其中一項原因所造成:

  • AWS Batch 運算環境的 ECS 執行個體磁碟區承受佇列中所有其他工作的高 I/O 壓力。這些在 ECS 執行個體上建立並執行的工作可能會耗盡突發平衡。若要解決此問題,請依照本文中解決任何突發平衡問題一節中的步驟執行。
  • 清理已停止的 ECS 容器的速度不夠快,無法釋放 Docker 常駐程式。如果您使用自訂 Amazon Machine Image (AMI) 而不是 AWS Batch 提供的預設 AMI,則可能會遇到 Docker 問題。AWS Batch 的預設 AMI 可最佳化您的 Amazon ECS 清理設定。若要解決此問題,請依照本文中解決任何 Docker 問題一節中的步驟執行。

如果這些問題都不是造成錯誤的原因,則可以透過執行下列動作進一步對此問題進行疑難排解:

  • 檢查您的 Docker 日誌以識別錯誤來源。
  • 在 ECS 叢集中的 ECS 執行個體上執行與 AWS Batch 運算環境相關聯的 Amazon ECS 日誌收集器指令碼

解決方法

解決任何突發平衡問題

檢查 ECS 執行個體的突發平衡

  1. 開啟 Amazon ECS 主控台

  2. 在導覽窗格中,選取叢集。然後,選擇包含您的工作的叢集。

**注意:**叢集名稱以運算環境的名稱開頭,後接 _Batch_ 及數字和字母的隨機雜湊。

  1. 選擇 ECS 執行個體標籤。

  2. EC2 執行個體欄中,選擇您的執行個體。

**注意:**若要尋找失敗工作的執行個體 ID,請執行 AWS Batch describe-jobs 命令。執行個體 ID 會顯示在 containerInstanceArn 的輸出中。

  1. 在 Amazon EC2 主控台的說明標籤上,從區塊型儲存裝置中選擇您的磁碟區的連結。

  2. 在區塊型儲存裝置快顯視窗中,為 EBS ID 選擇您的磁碟區。

  3. 選擇監控標籤。然後,選擇突發平衡以檢查您的突發平衡指標。如果您的突發平衡降到 0,則表示您的突發平衡已耗盡。

為您的受管運算環境建立啟動範本

**注意:**如果您變更啟動範本,您必須建立新的運算環境。

  1. 開啟 Amazon EC2 主控台,然後選擇啟動範本

  2. 選擇建立啟動範本

  3. 對於 AMI ID,選取預設的 Amazon ECS 最佳化 AMI。

  4. 儲存 (磁碟區) 區段中,從磁碟區類型欄位中選擇磁碟區類型。然後,在大小 (GiB) 欄位中輸入整數值。

**注意:**如果為磁碟區類型選擇](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html#EBSVolumeTypes_piops)佈建 IOPS SSD (io1)[,請輸入 IOPS 允許的整數值。

  1. 選擇建立啟動範本

  2. 使用新的啟動範本建立新的受管運算環境。

使用您的 AMI 建立 AWS Batch 運算環境

**注意:**如果您變更 AMI,則必須建立新的運算環境,因為無法更新 AMI ID 參數。

1.    開啟 Amazon EC2 主控台

  1. 選擇啟動執行個體

  2. 依照設定精靈中的步驟建立您的執行個體。

重要:新增儲存頁面上,修改執行個體的磁碟區類型或大小。磁碟區越大,基準效能越高,且磁碟區補充突發平衡的速度也越慢。若要取得高 I/O 負載的較佳效能,請將磁碟區變更為 io1 類型。

  1. 從執行個體建立運算資源 AMI

  2. 為包含您的 AMI ID 的 AWS Batch 建立運算環境

解決任何 Docker 問題

預設情況下,Amazon ECS 容器代理程式會自動清除已停止的工作和容器執行個體未使用的 Docker 映像檔。如果您使用新映像檔執行新工作,則容器儲存空間可能會填滿未使用的 Docker 映像檔。

  1. 對您的 AWS Batch 運算環境使用 SSH 連接到容器執行個體

  2. 若要檢查 Amazon ECS 容器代理程式,請執行 Docker inspect ecs-agent 命令。然後,檢閱輸出中的 env 部分。

**注意:**您可以減小以下變數的值,以加快工作和映像清理速度:

  • ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION
  • ECS_IMAGE_CLEANUP_INTERVAL
  • ECS_IMAGE_MINIMUM_CLEANUP_AGE
  • ECS_NUM_IMAGES_DELETE_PER_CYCLE

您也可以對自動工作和映像清理使用可調整參數

  1. 使用更新的值建立新的 AMI。

-或-

使用包含新環境變數的使用者資料建立啟動範本。

使用更新的值建立新的 AMI

  1. /etc/ecs/ecs.config 檔案中設定您的代理程式組態參數。

  2. 重新啟動容器代理程式。

  3. 從執行個體建立運算資源 AMI。

  4. 為包含您的 AMI ID 的 AWS Batch 建立運算環境。

使用包含新環境變數的使用者資料建立啟動範本

  1. 使用使用者資料建立啟動範本

例如,下列 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==--
  1. 使用新的啟動範本建立受管運算環境。

相關資訊

發佈 CloudWatch 指標的 AWS 服務

運算資源 AMI

amazon-ecs-agent (AWS GitHub)

AWS 官方
AWS 官方已更新 2 年前