AWS Fargate重启任务未拉取ECR最新镜像问题排查
Fargate重启任务未拉取latest镜像的排查与临时解决办法
我长期使用latest标签向ECR推送镜像,此前停止Fargate任务后自动重启都会拉取最新镜像,但近期出现异常——重启后的任务仍使用旧镜像。查阅AWS官方文档得知:
每个Fargate任务都运行在专属的一次性单租户实例上。在Fargate上运行Linux容器时,实例不会缓存容器镜像或镜像层。因此,任务中定义的每个容器镜像都需要为每个Fargate任务从容器镜像仓库完整拉取。
但文档并未提及任务层面是否存在缓存逻辑。如果删除ECR中的旧镜像,会触发CannotPullContainerError错误。目前已知的临时解决方案包括:修改任务定义,用镜像SHA值替换latest标签;或者执行「强制部署」。不过我希望先排查自身操作是否存在问题。
排查步骤
- 核对任务定义的镜像配置:确认任务定义里的镜像URI确实是
[你的账号ID].dkr.ecr.[区域].amazonaws.com/[仓库名]:latest,没有误写成固定的镜像SHA或其他版本标签。 - 验证镜像推送结果:使用AWS CLI命令
aws ecr describe-images --repository-name [你的仓库名] --image-ids image-tag=latest,查看ECR中latest标签对应的镜像SHA,和本地推送的镜像SHA是否一致,排除推送失败或推错仓库的可能。 - 检查ECS服务部署配置:如果任务由ECS服务管理,查看服务的部署策略——是否「最小健康百分比」设置过高,导致滚动部署时复用了旧任务实例?或者服务的启动类型、网络配置是否有变更,影响了镜像拉取逻辑?
- 确认任务重启的触发逻辑:如果是手动停止单个任务,要确认ECS服务的期望任务数是否正常,重启的任务是否是服务基于最新任务定义启动的。如果服务没有触发新部署,可能还是沿用旧的任务定义配置。
- 检查任务执行角色权限:确认Fargate任务的执行角色是否保有拉取ECR镜像的权限,避免因IAM策略变更导致拉取最新镜像失败,进而出现异常 fallback 情况。
临时解决方案
- 改用镜像SHA值:在任务定义中直接指定镜像的完整SHA(例如
[仓库URI]@sha256:xxxxxx),确保每次都拉取确定的镜像版本。 - 执行强制部署:在ECS服务控制台选择「强制部署」,强制服务使用最新任务定义启动新任务,替换旧任务。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

