AWS ECS集群Active运行但ECR镜像误删 如何恢复集群内容文件
恢复方案
只要当前ECS集群上承载业务的实例/任务还处于正常运行状态、没有触发重建/销毁调度,完全可以从存活节点上把镜像、业务文件全部捞回,操作路径如下:
- 优先从运行节点提取可用镜像,补全ECR仓库
先定位到运行业务的集群节点:如果是EC2启动类型的集群,直接通过SSH登录对应EC2实例;如果是Fargate启动类型的任务,先通过ECS Exec功能进入容器环境。
登录EC2节点后先查询运行中对应业务的容器ID:docker ps | grep 你的业务服务关键词
拿到容器ID后,直接将运行中的容器提交为本地镜像:docker commit <对应容器ID> recovered-image:latest
后续给本地镜像打上对应ECR仓库的标签,执行push操作就能把完整可用的镜像推回重建后的ECR仓库,不需要依赖原始源码或者已删除的ECR镜像。
注意:这步操作要在集群触发实例重启、服务重调度、任务替换之前完成,一旦运行中的容器被销毁,节点本地缓存的镜像和运行态数据会被直接清除。 - 直接提取容器内的业务文件,找回源码、配置
不需要提取完整镜像也能单独导出容器内的文件:拿到运行中容器ID后,用docker cp命令直接把容器内的目标路径拷贝到宿主机本地即可,比如导出容器内/app路径下的全部业务代码、配置文件:docker cp <容器ID>:/app /opt/saved-business-files
导出完成后就能在宿主机对应路径拿到所有运行态的业务代码、配置文件、甚至业务运行产生的持久化临时数据。如果是Fargate环境,进容器后先把需要的目录打包,再通过会话管理的文件传输能力导出即可。 - 临时防护操作避免数据彻底丢失
开始恢复操作前,先临时暂停对应服务的自动部署、自动伸缩、实例异常替换策略,避免恢复过程中存活的运行容器被调度销毁,等所有需要的镜像、文件全部导出备份完成后再恢复正常调度策略。
所有内容恢复完成后,记得将导出的源码、配置提交到私有代码仓库做持久化存储,ECR镜像开启版本保留和跨区备份,不要将运行中的线上集群作为唯一数据存储载体。
内容的提问来源于stack exchange,提问作者kuollam
相关产品推荐
相关产品推荐

