使用 AWS re:Post 即表示您同意 AWS re:Post 使用條款

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

2 分的閱讀內容
0

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

簡短說明

如果您的 Docker startDocker 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 問題。

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

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

解決方法

解決突發平衡問題

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

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱 AWS CLI 錯誤疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

請完成下列步驟:

  1. 開啟 Amazon ECS 主控台
  2. 在導覽窗格中,選擇叢集。然後,選擇包含工作的叢集。
    **注意:**叢集名稱以運算環境的名稱開頭,後接 _Batch_ 及數字和字母的隨機雜湊。
  3. 選擇基礎架構標籤。
  4. 基礎架構欄的容器執行個體列下方,選擇您的執行個體 ID
    **注意:**若要尋找失敗工作的執行個體 ID,請執行 AWS Batch describe-jobs AWS CLI 命令。執行個體 ID 會顯示在 containerInstanceArn 的輸出中。
  5. 在 Amazon EC2 主控台中,確定執行個體仍然是選中的。然後在儲存區段中,選擇磁碟區 ID 的連結。
  6. 在區塊型儲存設備快顯視窗中,對於磁碟區 ID,選取您的磁碟區。
  7. 選擇監控標籤。然後,選擇突發平衡以檢查您的突發平衡指標。如果您的突發平衡降到 0,則表示您的突發平衡已耗盡。

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

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

請完成下列步驟:

  1. 開啟 Amazon EC2 主控台,然後選擇啟動範本
  2. 選擇建立啟動範本
  3. 對於 AMI ID,選取預設的 Amazon ECS 最佳化 AMI。
  4. 儲存 (磁碟區) 區段中,從磁碟區類型欄位中選擇磁碟區類型。然後,在大小 (GiB) 欄位中輸入整數值。
    **注意:**如果為磁碟區類型選擇](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html#vol-type-ssd)佈建 IOPS SSD (io1)[,請輸入 IOPS 允許的整數值。
  5. 選擇建立啟動範本
  6. 使用新的啟動範本建立新的受管運算環境。

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

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

請完成下列步驟:

  1. 開啟 Amazon EC2 主控台
  2. 選擇啟動執行個體
  3. 依照設定精靈中的步驟建立您的執行個體。
    重要事項:新增儲存頁面上,修改執行個體的磁碟區類型或大小。磁碟區越大,基準效能越高,且磁碟區補充突發平衡的速度也越慢。若要取得高 I/O 負載的較佳效能,請將磁碟區變更為 io1 類型。
  4. 從執行個體建立運算資源 AMI
  5. 為包含您的 AMI ID 的 AWS Batch 建立運算環境

解決 Docker 問題

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

請完成下列步驟:

  1. 對您的 AWS Batch 運算環境使用 SSH 連線到容器執行個體
  2. 若要檢查 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
    您也可以對自動工作和映像清理使用可調整參數。
  3. 使用更新的值建立新的 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==--

    如需 MIME 多部分檔案的詳細資訊,請參閱 cloud-init 網站上的 MIME 多部分檔案

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

相關資訊

發佈 CloudWatch 指標的 AWS 服務

運算資源 AMI

GitHub 網站上的 amazon-ecs-agent

AWS 官方
AWS 官方已更新 7 個月前