僵尸代码之谜:为什么我的 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

Back to Blog

相关文章

阅读更多 »

Rapg:基于 TUI 的密钥管理器

我们都有这种经历。你加入一个新项目,首先听到的就是:“在 Slack 的置顶消息里查找 .env 文件”。或者你有多个 .env …

技术是赋能者,而非救世主

为什么思考的清晰度比你使用的工具更重要。Technology 常被视为一种魔法开关——只要打开,它就能让一切改善。新的 software,...

踏入 agentic coding

使用 Copilot Agent 的经验 我主要使用 GitHub Copilot 进行 inline edits 和 PR reviews,让我的大脑完成大部分思考。最近我决定 t...