跳至内容

如何确保 Amazon ECS 在部署期间使用最新的容器实例映像摘要?

1 分钟阅读
0

我更新了我的 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_DEPLOYEXTERNAL 部署控制器的服务中,无法解析容器映像标签。

要更新映像摘要,请完成“确保服务使用最新的映像”部分中的步骤。

停用版本一致性

您可能需要使用可更改的容器映像标签(例如 LATEST),而不是一致的映像。要配置该设置,请更新您的容器定义,将 versionConsistency 设置为 disabled。默认情况下,versionConsistency 设置为 enabled。当您将该值更改为 disabled 时,Amazon ECS 将不再将容器映像标签解析为摘要。相反,Amazon ECS 会使用容器定义中的原始映像 URI 进行部署。

相关信息

Announcing software version consistency for Amazon ECS services

AWS 官方已更新 1 年前