如何對 Amazon ECS 任務的容器運作狀態檢查失敗進行疑難排解?

上次更新日期:2022 年 3 月 11 日

我的 Amazon Elastic Container Service (Amazon ECS) 任務未通過容器運作狀態檢查。如何解決此錯誤?

簡短描述

如果您收到以下錯誤,則表示您任務中的 Amazon ECS 容器正在使用您的服務無法通過的運作狀態檢查

(service AWS-Service) (task ff3e71a4-d7e5-428b-9232-2345657889) failed container health checks

注意:如果您遇到彈性負載平衡 (ELB) 運作狀態檢查問題,請參閲如何讓我的 Amazon ECS 任務執行以通過 Amazon ECS 中的 Application Load Balancer 運作狀態檢查?

解決方案

若要對 Amazon ECS 容器運作狀態檢查失敗進行疑難排解,請嘗試以下提示:

  • 在本機測試容器,確保容器在佈建到 Amazon ECS 之前通過容器運作狀態檢查。
  • 確認您傳遞給容器的命令正確無誤,並且您使用的語法是否正確地執行 Amazon ECS 任務
  • 確保您的容器有足夠的時間具現化。
  • 如果您的 Amazon ECS 任務已執行一段時間,請檢查您的應用程式日誌和 Amazon CloudWatch Logs。

本機測試容器,以確保它通過容器運作狀態檢查

在將容器置佈建到 Amazon ECS 之前,請確保您的容器能夠按預期工作,並通過指定的容器運作狀態檢查。您可以使用 Docker 網站上的 Docker 文件運作狀態檢查組態來測試您的容器。容器通過 Dockerfile 中定義的運作狀態檢查後,您可以在任務定義中指定運作狀態檢查組態。通過指定運作狀態檢查組態,Amazon ECS 容器代理可以監控並報告指定的運作狀態檢查。

注意:Amazon ECS 不監控嵌入到容器映像中且未在容器定義中指定的 Docker 運作狀態檢查。容器定義中指定的運作狀態檢查參數會覆蓋容器映像中存在的任何 Docker 運作狀態檢查。

確認您的 Amazon ECS 任務使用了正確的語法

確保您使用的是正確的命令和語法來執行您的 Amazon ECS 任務。

例如,如果您使用 AWS 管理主控台 JSON 面板、AWS Command Line Interface (AWS CLI) 或 API,則將命令清單括在括號中,如下所示:

["CMD-SHELL", "curl -f http://localhost/ || exit 1"]

如果您使用 AWS 管理主控台編輯 ECS 任務,則無需包含括號:

"CMD-SHELL", "curl -f http://localhost/ || exit 1"

另外,請確保您沒有用雙引號分隔運作狀態檢查命令,如 ["CMD-SHELL"、"healthcheck.sh"、"||"、"exit 1"]。而是使用以下命令語法:

["CMD-SHELL", "healthcheck.sh || exit 1"]

確保您的容器有足夠的時間來具現化

如果您的容器需要一段時間才能啟動,則容器可能無法通過容器運作狀態檢查。嘗試在進階容器定義參數中設定 startPeriod。這使您的 Amazon ECS 容器有足夠的時間進行引導,然後再將任何失敗的運作狀態檢查包含在最大重試次數中。

如果任務已執行一段時間,請檢查您的應用程式日誌和 Amazon CloudWatch Logs

如果您的 Amazon ECS 容器已執行一段時間,但未通過容器運作狀態檢查,請檢查您的應用程式日誌。如果您的 Amazon ECS 任務使用 awslog 日誌應用程式,請在 Amazon CloudWatch 上檢查您的應用程序日誌。

注意:AWS Fargate 是一項受管服務。因此,您無法存取底層基礎設施。若要進行疑難排解,請在 Amazon Elastic Compute Cloud (Amazon EC2) 中啟動您的 Amazon ECS 任務。然後,使用 SSH 連接到您的 Amazon EC2 執行個體。您也可以嘗試使用 Amazon ECS Exec 直接與您的 ECS 容器互動。


此文章是否有幫助?


您是否需要帳單或技術支援?