AWS ECS部署ECR更新后的Docker镜像后变更未生效问题求助
ECS部署.NET Core镜像更新不生效排查方案
1. 镜像与ECR侧校验
- 确认镜像推送时是否使用了固定标签(如
latest):ECS默认镜像拉取策略为IfNotPresent,若ECS节点上已存在同标签的旧镜像,不会主动拉取ECR上的新镜像,需在任务定义中显式配置"pullPolicy": "Always"解决 - 本地拉取ECR上对应标签的镜像,运行后验证功能是否为更新后的版本,避免构建、推送环节出错,新镜像未成功上传到ECR
- 核对任务定义中的镜像URI,需和ECR上的镜像地址完全匹配,包含AWS账号ID、区域、仓库名、标签四个部分,任意一处错误都会拉取到旧镜像或错误镜像
2. ECS配置校验
- 确认更新ECS服务时已指定最新的任务定义修订版本,避免更新服务时漏选新版本,继续沿用旧任务定义
- 检查ECS服务部署参数:最小健康百分比、最大百分比配置是否合理,若最小健康百分比设为100%、最大百分比也为100%,旧任务不会被终止,新任务无法启动替换
- 查看ECS运行中任务的详情,确认其关联的任务定义版本、镜像URI是否为预期的最新版本,同时查看任务启动日志,排查是否存在拉取镜像失败、自动回滚到旧版本的报错
- 若使用Fargate启动类型,确认是否开启了任务自动回滚功能,若新任务健康检查不通过,ECS会自动回滚到上一个稳定版本,导致更新看起来未生效
3. 流量与应用侧校验
- 排查访问入口的缓存问题:负载均衡(ALB/CLB)缓存规则、CDN缓存、客户端本地缓存、浏览器缓存都可能导致展示旧版本内容
- 直接通过ECS任务的内网IP+端口访问应用,验证返回内容是否为更新后的版本,排除上层流量组件的干扰
- 查看.NET Core应用的启动日志,核对启动时间、版本号等标识是否匹配新镜像的构建时间,确认当前运行的是新启动的应用进程
- 若你的.NET Core应用配置了本地缓存、静态资源预编译逻辑,确认镜像构建时已清理旧缓存文件,避免新镜像内仍然打包了旧的静态资源或配置
快速定位方法
给新镜像打唯一的非重复标签(比如用构建时间戳v202405201430),更新任务定义使用该新标签的镜像URI,再更新ECS服务,若此时更新生效,则可判定问题是由latest等重复标签的拉取策略缓存导致。
内容的提问来源于stack exchange,提问作者Gauri Desai
相关产品推荐
相关产品推荐

