為什麼我的 Amazon ECS 任務會停止?
我想要對 Amazon Elastic Container Service (Amazon ECS) 任務停止的問題進行疑難排解。
解決方法
對已停止的任務進行疑難排解
使用 DescribeTasks API 呼叫來檢視已停止任務的詳細資訊。然後,根據任務詳細資訊中的停止原因和結束代碼,對您的任務進行疑難排解。
已停止任務的詳細資訊只會在 API 結果中顯示 1 小時。若要延長檢視已停止任務詳細資訊的時間,請使用 GitHub 網站上的 amazon-ecs-stopped-tasks-cwlogs 範本。
任務中的必要容器已結束
如果您的必要容器已結束,請使用以下其中一個結束代碼來疑難排解您的問題:
- 當進入點、成功,或 CMD 命令完成且 Amazon ECS 停止容器時,就會出現 0 結束代碼。
- 當發生應用程式錯誤時,就會出現 1 結束代碼。若要疑難排解此結束代碼,請檢閱您的應用程式日誌。
- 當您未在 30 秒內回應 SIGTERM,且 Amazon ECS 使用 SIGKILL 停止容器時,就會出現 137 結束代碼。若要變更預設的 30 秒期間,請使用 ECS_CONTAINER_STOP_TIMEOUT 參數更新 Amazon ECS 容器代理程式。
**注意:**此結束代碼也會因記憶體不足錯誤而發生。若要檢查您的資源使用量,請檢閱您 Amazon ECS 的 Amazon CloudWatch 指標。 - 當應用程式嘗試存取不可用的記憶體區域時,就會出現 139 結束代碼。如果未設定的值或無效的環境預留位置導致區段錯誤,也會出現此結束代碼。若要疑難排解此問題,請檢閱您的 Amazon ECS 任務的 CloudWatch 日誌。
- 當容器收到正常關閉警告,且 Amazon ECS 關閉容器時,就會出現 143 結束代碼。
- 當容器中的 ENTRYPOINT CMD 命令因錯誤而失敗時,就會出現 255 結束代碼。若要確認您的容器是否因錯誤而失敗,請檢閱您的 CloudWatch 日誌。
如需更多疑難排解步驟,請參閱當容器結束時,我該如何對停止或無法啟動的 Amazon ECS 任務進行疑難排解?
CannotPullContainerError
當任務因 Amazon ECS 無法擷取指定的容器映像而無法啟動時,就會發生此錯誤。
若要解決 Amazon Elastic Compute Cloud (Amazon EC2) 啟動類型任務的此問題,請參閱如何解決在 Amazon ECS 中啟動 EC2 任務時出現的「CannotPullContainerError」錯誤?
若要解決使用 AWS Fargate 啟動類型的 Amazon ECS 任務的此問題,請參閱如何解決 Fargate 上 Amazon ECS 任務的「cannotpullcontainererror」錯誤?
任務未通過 Elastic Load Balancing 運作狀態檢查
若要解決使用 EC2 啟動類型之任務的此問題,請參閱如何讓使用 Amazon EC2 啟動類型的 Amazon ECS 任務通過 Application Load Balancer 運作狀態檢查?
若要解決使用 Fargate 啟動類型任務的此問題,請參閱如何對 Fargate 上 Amazon ECS 任務的運作狀態檢查失敗問題進行疑難排解?
容器運作狀態檢查失敗
您可以在 HealthCheck API 或 Dockerfile 中定義運作狀態檢查。如需更多資訊,請參閱 Docker 網站上的 HEALTHCHECK。
若要對容器運作狀態檢查錯誤進行疑難排解,請參閱如何對 Amazon ECS 任務的容器運作狀態檢查失敗進行疑難排解?
連接埠運作狀態不佳
當運作狀態不佳的 Amazon EC2 執行個體未在指定連接埠上回應運作狀態檢查時,會出現包含「Instance i-## port # is unhealthy」的錯誤。
若要疑難排解此問題,請採取以下動作:
- 驗證附加至容器執行個體的安全群組是否允許必要流量。
- 執行以下命令,以確認後端可立即回應:
**注意:**請將 container-port 替換為您的容器連接埠,並將 path 替換為運作狀態檢查路徑。` curl -iv localhost:container-port/path` - 將回應逾時值從預設的 30 秒調高。使用 ECS_CONTAINER_STOP_TIMEOUT 參數更新 Amazon ECS 容器代理程式。
如需更多此錯誤訊息的資訊,請參閱您的 Network Load Balancer 的存取日誌。
Amazon ECS 正在對託管任務的底層基礎結構執行維護作業
當 Amazon ECS 對執行您應用程式容器的 Fargate 伺服器執行維護作業時,就會發生此錯誤。因此,您的 Amazon ECS 服務會暫時無法使用。
如需更多資訊,請參閱 Amazon ECS 上 AWS Fargate 的任務淘汰與維護作業。
若為獨立任務,請參閱如何對在 Fargate 上執行 Amazon ECS 任務的任務淘汰通知採取動作?
Amazon ECS 服務擴展事件已啟動
在 Amazon ECS 服務擴展事件期間,任務會停止,因為擴展政策減少了服務中執行的任務數量。然後,Amazon ECS 會停止任務,以達到新指定的數量。這項動作通常會在需求下降時發生,而 Amazon ECS 需要較少任務來處理工作負載。
若要解決此問題,請採取以下動作:
- 為服務或任務的變更建立 CloudWatch 警示。
- 檢閱可能會影響您任務的排定部署。
若要保護您的任務不因服務自動擴展或部署而在縮減事件中遭到終止,請使用 Amazon ECS 任務縮減保護。
如需更多資訊,請參閱如何檢視及管理 Amazon ECS 服務的排定擴展動作?
使用者停止的任務
若要識別發起 StopTask API 呼叫的使用者,請在 AWS CloudTrail 中 檢視 StopTask 的 userIdentity 資訊。
ResourceInitializationError
如需不同 ResourceInitialization 錯誤訊息及解決步驟,請參閱疑難排解 Amazon ECS ResourceInitializatioError 錯誤。
若要疑難排解「ResourceInitializationError: unable to pull secrets or registry auth」錯誤,請參閱當我嘗試提取祕密或擷取 ECS 任務的 Amazon ECR 驗證時,如何解決「ResourceInitializationError」錯誤?
若要疑難排解「ResourceInitializationError: failed to validate logger args」錯誤,請參閱如何解決 Amazon ECS 中的「ResourceInitializationError: failed to validate logger args」錯誤?
SpotInterruptionError
如需更多 SpotInterruptionError 的資訊,請參閱疑難排解 Amazon ECS SpotInterruption 錯誤。
若要疑難排解此錯誤,請參閱如何處理 AWS Fargate Spot 任務中的 Spot 終止通知?
OutOfMemoryError
當容器結束,原因是容器中的程序使用超過任務定義中配置的記憶體時,就會發生此錯誤。
若要疑難排解此錯誤,請參閱如何疑難排解 Amazon ECS 中的 OutOfMemory 錯誤?
疑難排解任務停止時收到的錯誤訊息
如果您在任務停止時收到錯誤訊息,請根據錯誤採取以下疑難排解動作。
在您的叢集中找不到容器執行個體
若要解決此問題,請啟動容器執行個體。
若要檢閱叢集的執行個體,請完成以下步驟:
- 開啟 Amazon ECS console (Amazon ECS 主控台)。
- 在導覽窗格中,選擇 Clusters (叢集)。
- 選取您的叢集。
- 選擇 Infrastructure (基礎結構) 索引標籤。
- 檢閱 Container instances (容器執行個體) 區段。
如果沒有容器執行個體,請參閱為什麼我的 Amazon EC2 執行個體無法加入 Amazon ECS 叢集?
InvalidParameterException
若要解決此錯誤訊息,請檢查 TaskDefinition 中的參數是否存在,且具有正確的 Amazon Resource Name。驗證任務角色和任務執行角色是否具備必要權限。
您已達到可同時執行的任務數量上限
當您超出 Amazon ECS 服務配額時,就會發生此錯誤。若要疑難排解此問題,請參閱如何解決 Amazon ECS 服務配額問題?
相關資訊
- 語言
- 中文 (繁體)

相關內容
- 已提問 3 年前
AWS 官方已更新 1 年前
