僵尸代码之谜:为什么我的 EC2 拒绝更新 🕵️♂️
发布: (2026年1月15日 GMT+8 11:07)
2 min read
原文: Dev.to
Source: Dev.to
罪魁祸首?Docker 的本地镜像缓存
Docker 更倾向于复用已经标记为 latest 的镜像。当你让它运行最新镜像时,它会先检查本地缓存。如果发现本地已有 latest 标签的镜像,Docker 会认为它是最新的,直接跳过拉取新版本,即使镜像内容已经改变。
调查:如何强制“搜查与扣押”
步骤 1 – 证明身份(ECR 登录)
aws ecr get-login-password --region YOUR_REGION \
| docker login --username AWS --password-stdin YOUR_ECR_REGISTRY
步骤 2 – 停止“冒名顶替”容器
docker stop backend-app
docker rm backend-app
步骤 3 – 删除缓存的镜像(缓存破坏者)
docker rmi YOUR_ECR_REGISTRY/YOUR_REPO:latest
步骤 4 – 拉取最新镜像并运行
docker pull YOUR_ECR_REGISTRY/YOUR_REPO:latest
docker run -d --name backend-app -p 8081:8081 \
--restart always YOUR_ECR_REGISTRY/YOUR_REPO:latest
“资深开发者”建议
使用提交 SHA 作为标签
- 使用 Git 提交 SHA(例如
my-app:8f2a4b1)来构建并标记镜像。 - 让你的 EC2 部署脚本请求该特定 SHA。
- Docker 会发现本地缓存中没有该确切版本,从而自动拉取,避免出现“僵尸”部署。
结束语
缓存问题会浪费大量调试时间。使用不可变标签(如提交 SHA)可以确保始终运行预期的代码版本。
标签: #Docker #DevOps #EC2 #ECR