

# Amazon ECS 任务和映像自动清理
<a name="automated_image_cleanup"></a>

每次将任务放在一个容器实例上时，Amazon ECS 容器代理都会检查该任务中引用的映像是否为存储库中的指定标记的最新版本。如果不是，默认行为将允许代理从各个存储库中拉取映像。如果频繁更新任务和服务中的映像，则容器实例存储可能很快会被没在使用并且可能再也不会使用的 Docker 映像填满。例如，如果您使用了连续集成和连续部署（CI/CD）管道。

**注意**  
可以使用 `ECS_IMAGE_PULL_BEHAVIOR` 参数自定义 Amazon ECS 代理映像拉取行为。有关更多信息，请参阅 [Amazon ECS 容器代理配置](ecs-agent-config.md)。

同样，属于已停止任务的容器也可能会通过日志信息、数据卷和其他项目消耗容器实例存储空间。这些项目对于调试意外停止的容器很有用，但此存储的大部分空间在一段时间后可以安全地释放。

原定设置情况下，Amazon ECS 容器代理将自动清除已停止的任务和您的容器实例上的任何任务均未在使用的 Docker 映像。

**注意**  
自动映像清除功能要求 Amazon ECS 容器代理的版本最低为 1.13.0。要将您的代理更新至最新版本，请参阅[更新 Amazon ECS 容器代理](ecs-agent-update.md)。

以下代理配置变量可用于调整自动化任务和映像清除体验。有关如何在容器实例上设置这些变量的更多信息，请参阅 [Amazon ECS 容器代理配置](ecs-agent-config.md)。

`ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION`  
等待删除已停止任务的容器的默认时间。如果该值设置为小于 1 秒，则系统会忽略该值。默认情况下，此参数设置为 3 小时，但如果您的应用程序有需要，您最多可以将此时间间缩短为 1 秒钟。  
只要存在引用某个映像的容器，映像清除过程就无法删除该映像。移除容器后，根据映像清理配置参数，任何未引用的图像都将成为清理的候选项。

`ECS_DISABLE_IMAGE_CLEANUP`  
如果您将此变量设置为 `true`，则会在您的容器实例上关闭自动映像清除，且不会自动删除映像。

`ECS_IMAGE_CLEANUP_INTERVAL`  
此变量指定自动映像清除过程应检查要删除的映像的频率。默认值为每 30 分钟一次，但您可以将此时间缩短至 10 分钟，以便更频繁地删除映像。

`ECS_IMAGE_MINIMUM_CLEANUP_AGE`  
此变量指定拉取映像与映像可能变成删除的候选项之间的最短时间。这可用于防止清除刚刚拉取的映像。默认值为 1 小时。

`ECS_NUM_IMAGES_DELETE_PER_CYCLE`  
此变量指定在一个清除周期内可以清除的映像数。默认值为 5，最小值为 1。

当 Amazon ECS 容器代理正在运行且自动映像清除未关闭时，该代理将按照 `ECS_IMAGE_CLEANUP_INTERVAL` 变量确定的频率，检查是否有未被正在运行或已停止的容器引用的 Docker 映像。如果发现未使用的映像，并且这些映像的存在时间超过了 `ECS_IMAGE_MINIMUM_CLEANUP_AGE` 指定的最短清除时间，则该代理将删除由 `ECS_NUM_IMAGES_DELETE_PER_CYCLE` 变量指定的最大数量的映像。最早引用的映像会最先删除。在删除映像后，该代理将等到下一个时间间隔并重复上述流程。