ECR Image Deployment Pattern¶
概念概覽
ECR Token 過期問題¶
核心知識¶
ECR Token 過期問題¶
ECR 的 docker login token 12 小時後過期。若 docker-compose 設定 pull_policy: always,VM 重啟或超過 12 小時後會因 token 失效導致無法拉 image,服務啟動失敗。
解法:
1. docker-compose 移除 pull_policy: always(用本地已快取的 image)
2. 或在 EC2 user-data / cron job 每 10 小時自動執行 ECR login 刷新 token
Dockerfile 路徑依賴¶
若 docker-compose 引用 build: ./path/to/Dockerfile,部署到 VM 時**必須一起打包對應的 Dockerfile**,否則 compose up 失敗。
Tag 策略¶
用 shared-dev tag 與 dev/prod 區隔環境。建議用獨立 repository(service-name-shared-dev)而非同 repo 不同 tag,避免誤拉。
經驗教訓¶
-
ECR token 12 小時過期是常見被遺忘的陷阱,設計長期運行環境時必須有 token 自動刷新機制
-
docker-compose pull_policy: always 在 token 有效期內方便,但長期環境應避免
常見陷阱¶
-
pull_policy: always + ECR token 過期 = VM 重啟後服務無法起來
-
shared tag 與 dev/prod 放同一 ECR repo 有混用誤拉風險
最佳實踐¶
-
長期運行環境加入 ECR login cron job(每 10 小時)
-
shared-dev 環境用獨立 ECR repository 命名隔離
相關概念¶
- AWS SSM Session Manager Zero-SSH Deployment
- Docker Bind Mount + fsnotify 熱載入限制
- Docker K8s Init Script Permission Inheritance
- ECR Image Tag Versioning in Jenkins Pipeline
來源 Sessions¶
| 日期 | Session | 貢獻摘要 |
|---|---|---|
| 2026-04-07 | 9632bcf1-7666-464a-9364-4b237ee0291b | 記錄 ECR token 12 小時過期對 docker-compose 的影響,以及 shared-dev tag 策略的風險 |