좀비 코드 사건: 내 EC2가 업데이트를 거부한 이유 🕵️♂️
발행: (2026년 1월 15일 오후 12:07 GMT+9)
2 min read
원문: Dev.to
Source: Dev.to
범인? Docker의 로컬 이미지 캐시
Docker는 이미 latest 태그가 붙은 이미지를 재사용하는 것을 선호합니다. 최신 이미지를 실행하도록 지시하면 먼저 로컬 캐시를 확인합니다. latest 태그가 있는 이미지를 찾으면 최신 버전이라고 가정하고 새 버전을 풀링하지 않으며, 내용이 변경되었더라도 그대로 사용합니다.
조사: “수색 및 압수” 강제 방법
Step 1 – 본인 인증 (ECR 로그인)
aws ecr get-login-password --region YOUR_REGION \
| docker login --username AWS --password-stdin YOUR_ECR_REGISTRY
Step 2 – “가짜” 컨테이너 중지
docker stop backend-app
docker rm backend-app
Step 3 – 캐시된 이미지 삭제 (캐시 버스터)
docker rmi YOUR_ECR_REGISTRY/YOUR_REPO:latest
Step 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와 같은 불변 태그를 사용하면 항상 의도한 코드 버전을 실행한다는 점을 보장할 수 있습니다.
Tags: #Docker #DevOps #EC2 #ECR