도커 컨테이너 죽으면 Exit Code 하나로 대충 원인 유추 가능함
운영하면서 제일 많이 본 코드들 정리함
Exit 137 (제일 자주 나옴)
- SIGKILL(9) 받았다는 뜻임
- 원인 두 가지밖에 없음
- 헬스체크 실패 → Swarm/K8s가 강제 kill
- OOM(메모리 부족) → 커널이 kill
- 공통점: 둘 다 강제 종료라 137로 뜸
- 운영에서 spike 나면 대부분 이거 뜸
Exit 143 (정상 종료)
- SIGTERM(15) 받았다는 뜻
- docker stop, rolling update 때 자주 뜸
- 정상 종료라 문제 아님
- 업데이트나 재배포 시 거의 무조건 143 찍힘
!! Exit 1 (앱 내부 오류)
- Generic error
- 내부 코드 예외, 설정 파일 오류, DB 연결 실패, 포트 충돌 등
- Node.js에서 throw 안 잡히면 바로 exit 1 됨
- 로그 보면 바로 원인 나오는 유형
Exit 139 (segmentation fault)
- native addon, glibc 문제, 메모리 접근 오류 등
- Node 앱에서 sharp, canvas 등 C++ addon 쓰면 종종 뜸
- 컨테이너 자체 문제라면 이미지 빌드 단계부터 확인해야 함
Exit 0 (정상 종료)
- 그냥 정상 종료
- 수동 stop, graceful shutdown 등
Exit 126 (권한 문제)
- 실행 권한 없음
- entrypoint.sh 퍼미션 안 줬을 때 자주 뜸
- 또는 exec format error
Exit 127 (명령어 없음)
- entrypoint 잘못됨
- PATH 문제
- 실행할 파일이 아예 없음
운영에서 특히 자주 보는 Top 4
- 137 → 강제 종료(헬스체크 실패 or OOM)
- 143 → 정상 종료(업데이트/stop)
- 1 → 앱 내부 오류(DB/Redis/코드 예외)
- 139 → native crash
'TIL' 카테고리의 다른 글
| NAT(Network Address Translation) 네트워크란? (0) | 2025.12.02 |
|---|---|
| 컨테이너 포트를 host 포트로 못 쓰면??? (0) | 2025.11.28 |
| Nginx 502 Bad Gateway 발생 원인 정리 (0) | 2025.11.26 |
| redis 남아있는 죽은 socket.id 정리하기. (0) | 2025.11.24 |
| proxy_temp 파일이 날뛰어서 디스크 꽉 찼던 사건 정리 (1) | 2025.11.18 |