You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Docker镜像内容未在ECS更新:Jenkins部署异常求助

ECS部署后未加载ECR新镜像代码的排查与修复

核心排查方向(按优先级排序)

  • 检查任务定义的镜像标签
    若使用latest标签,ECS默认会缓存该镜像,即使ECR里的latest已更新,ECS启动新任务时可能跳过拉取。解决方法:

    • 构建镜像时使用唯一标签,比如Git commit哈希、时间戳:
      # Jenkins构建时生成唯一标签
      IMAGE_TAG=$(git rev-parse --short HEAD)
      docker build -t 123456789012.dkr.ecr.us-east-1.amazonaws.com/my-app:$IMAGE_TAG .
      
    • 更新任务定义时引用这个新标签,确保每次部署都是全新的镜像标识。
  • 验证ECS服务的任务定义版本
    确认ECS服务使用的任务定义是最新更新的版本:

    1. 进入ECS控制台 -> 目标服务 -> 「任务定义」标签
    2. 查看当前使用的任务定义版本是否和你更新的一致,若不一致,手动触发服务更新选择新版本。
    3. 强制触发新部署:在服务页面点击「更新服务」,勾选「强制新部署」选项,触发ECS重新调度所有任务。
  • 清理ECS容器实例的本地镜像缓存
    ECS容器实例(EC2)会缓存已拉取的镜像,即使ECR中镜像已删除,本地仍可能保留旧镜像:

    1. 登录到容器实例(通过EC2控制台连接)
    2. 列出本地镜像:docker images
    3. 删除对应旧镜像:docker rmi <旧镜像ID>
    4. 重启ECS代理,确保实例重新拉取镜像:
      # Amazon Linux 2系统
      sudo systemctl restart ecs
      
  • 排查Jenkins构建的Docker缓存问题
    Jenkins构建镜像时若复用缓存层,可能导致新代码未被打包:

    • 构建命令添加--no-cache参数,强制跳过缓存:
      docker build --no-cache -t my-app:$IMAGE_TAG .
      
    • 调整Dockerfile顺序:将COPY . /app这类代码复制步骤放在所有依赖安装步骤之后,确保代码变更时会重新构建该层,避免复用缓存。
  • 确认ECR镜像的一致性
    验证Jenkins推送的镜像与ECR中存储的镜像是否一致:

    1. 在Jenkins构建日志中找到构建完成的镜像ID(如Successfully built abc123)
    2. 进入ECR控制台 -> 对应仓库 -> 目标标签,查看镜像ID是否与Jenkins日志中的一致,确保推送的是正确构建的镜像。

内容的提问来源于stack exchange,提问作者Thirsty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 11:05:17