我更新了我的 Amazon Elastic Container Service (Amazon ECS) 服务以使用最新映像运行任务,但某些任务不使用新映像。或者,我的 Amazon ECS 任务失败了,并且我收到 cannotPullContainerError 错误。
简短描述
当您在 Amazon ECS 中更新映像时,您可能会收到以下错误消息:
“CannotPullContainerError:拉取映像清单已重试 1 次:无法解析引用 account-id.dkr.ecr.us-east-1.amazonaws.com/test:latest@sha256:1ed47f24455xxxxxxxxx677: account-id.dkr.ecr.us-east-1.amazonaws.com/test:latest@sha256:1ed47f24455xxxxxxxxx677:未找到”
当您更新映像时,必须同时更新服务。默认情况下,Amazon ECS 会将任务定义中指定的容器映像标签解析为容器映像摘要。
对于运行和维护单个任务的服务,Amazon ECS 会使用该任务为任务容器建立映像摘要。对于运行和维护多个任务的服务,Amazon ECS 会使用服务计划程序在部署期间启动的第一个任务。要在更新任务定义中的映像标签时更新映像摘要,请更新服务并使用 Force new deployment(强制实施新部署)设置。
有关映像行为的详细信息,请参阅容器映像解析。
解决方法
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
确保服务使用最新的映像
要确保服务使用最新的映像,请更新 Amazon ECS 服务,然后使用 Force new deployment(强制实施新部署)选项。或者,运行以下 AWS CLI 命令 update-service:
aws ecs update-service --cluster clustername --service servicename --force-new-deployment
**注意:**请将 clustername 替换为您的集群名称,将 servicename 替换为您的服务名称。
要使用特定的映像摘要,请更新任务定义,然后修改 Image URI(映像 URI)部分:
imageUri@imagedigest
"image": "accountid.dkr.ecr.region-name.amazonaws.com/image:latest@sha256:da04638bxxxxxxxxxx,"
解决“Image digest does not exist”(映像摘要不存在)错误
如果您收到 Image digest does not exist(映像摘要不存在)错误,请检查您是否删除了该映像。
要检查映像摘要是否存在于 Amazon Elastic Container Registry (Amazon ECR) 存储库中,请运行 describe-images 命令:
aws ecr describe-images --repository-name repositoryname --region regionname --query 'sort_by(imageDetails,& imagePushedAt)[*]'
**注意:**请将 repositoryname 替换为存储库名称,将 regionname 替换为您的 AWS 区域。
该命令的输出中将显示存储库中的所有映像。如果映像摘要不存在,请检查 AWS CloudTrail 事件历史记录中是否存在 BatchDeleteImage API 调用,以确定删除该映像的原因。要检查 Amazon ECR 生命周期策略是否可以删除正在运行的任务使用的映像,请检查 CloudTrail 中是否存在 PolicyExecutionEvent API 调用。
为确保容器映像标签不会发生变化,最佳做法是开启标签不变性功能。
**注意:**在使用 CODE_DEPLOY 或 EXTERNAL 部署控制器的服务中,无法解析容器映像标签。
要更新映像摘要,请完成“确保服务使用最新的映像”部分中的步骤。
停用版本一致性
您可能需要使用可更改的容器映像标签(例如 LATEST),而不是一致的映像。要配置该设置,请更新您的容器定义,将 versionConsistency 设置为 disabled。默认情况下,versionConsistency 设置为 enabled。当您将该值更改为 disabled 时,Amazon ECS 将不再将容器映像标签解析为摘要。相反,Amazon ECS 会使用容器定义中的原始映像 URI 进行部署。
相关信息
Announcing software version consistency for Amazon ECS services