Zayson
A to Zayson!
Zayson
전체 방문자
오늘
어제
  • 분류 전체보기 (132)
    • Computer Science (20)
      • Network (4)
      • DB (12)
      • OS (4)
    • Algorithm (32)
      • 완전탐색(Brute-Force) (3)
      • 그리디(Greedy) (6)
      • 투포인터(Two-Pointer) (1)
      • 그래프(Graph) (5)
      • BFS & DFS (9)
      • 구현, 시뮬레이션(Implementation) (5)
      • 다이나믹 프로그래밍(DP) (3)
    • Backend (51)
      • Spring Boot (19)
      • JPA (16)
      • Kafka (2)
      • Java (13)
      • Kotlin (1)
    • DevOps (1)
      • Jenkins (5)
      • Oracle Cloud Infrastructure (1)
      • Kubernetes & Docker (1)
    • Trouble Shooting (3)
      • JPA (1)
      • Spring Boot (2)
    • 회고 (5)
      • 엔빵 프로젝트 포스트 로드맵 (1)
      • 2022년 (4)
    • Kafka (7)
      • Kafka (5)
      • Kafka Connect (2)
    • 기술 서적 (6)
      • 데이터 중심 애플리케이션 설계 (3)
      • 개발자가 반드시 정복해야할 객체 지향과 디자인 패턴 (2)
      • 가상 면접 사례로 배우는 대규모 시스템 설계 기초 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

태그

  • CS
  • 완전탐색
  • spring boot
  • Java
  • 라이브스터디
  • 그리디
  • kafka
  • Kafka Connect
  • JPA
  • 백준
  • 구현
  • dfs
  • 나 혼자 스프링부트!
  • 프로그래머스
  • Backend
  • SpringBoot
  • 엔빵프로젝트
  • 관계형 데이터베이스 실전 입문
  • Computer science
  • BFS

최근 글

티스토리

hELLO · Designed By 정상우.
Zayson

A to Zayson!

Docker: Container Exit Code
DevOps/Kubernetes & Docker

Docker: Container Exit Code

2024. 10. 27. 22:10

개요


Docker Container의 Exit Code를 정리하고 각 코드의 의미에 대해서 정리한다.

Docker Container Exit Code


Docker Container Exit Code란 컨테이너가 종료될 때 “컨테이너가 종료된 원인”을 전달하는데 사용된다.

Exit Code를 통해서 컨테이너 종료의 근본적인 원인을 파악할 수 있다.

Exit Code는 0 ~ 255까지의 범위를 가지며, 125 미만의 코드는 애플리케이션 사이드에서 종료 코드를 설정하고, 125 이상의 코드는 컨테이너나 시스템 레벨에서 발생한 문제이며 코드는 예약되어 있다.

List

Exit Code Name Description
Exit Code 0 Purposely stopped 컨테이너가 자동으로 종료됨 (정상 종료)
Exit Code 1 Application error or Invalid Reference 애플리케이션 에러 혹은 컨테이너 이미지에 존재하지 않는 파일 참조
Exit Code 125 Command Execution Issue 도커 명령어 문제로 인한 실행 실패
Exit Code 126 Command Invocation Issue 컨테이너 내에서 실행할 수 없는 명령어 호출한 경우
Exit Code 127 Command Not Found 명령어를 찾을 수 없을 때 발생
Exit Code 128 Invalid argument to exit 유효하지 않은 종료 코드가 호출된 경우
Exit Code 134 Abnormal termination (SIGABRT) 컨테이너가 비정상적으로 자체 종료된 경우 (abort() 호출)
Exit Code 137 Immediate termination (SIGKILL) 컨테이너가 SIGKILL로 인한 강제 종료
Exit Code 139 Segmentation fault (SIGSEGV) 컨테이너가 액세스 권한이 없는 메모리 위치 액세스 시 발생하는 오류
Exit Code 143 Graceful termination (SIGTERM) 운영체제에서 컨테이너를 정상적으로 종료하도록 요청을 받고 정상적으로 종료됨
Exit Code 255 Unknown Error 알 수 없는 종료 코드를 받아 오류 원인 파악 불가

Exit Code 1 (Application Error or Invalid Reference)

  • Application Error: 애플리케이션 런타임 시 오류
  • Invalid Reference: 이미지에 애플리케이션이 참조하는 라이브러리나 파일이 없는 경우 발생하는 오류
  • 해결 방법
    • 컨테이너 로그를 확인해 애플리케이션이 참조하는 파일 경로가 올바른지 확인하거나, 애플리케션 오류를 확인해 문제가 생긴 라이브러리를 디버깅한다.

Exit Code 125 (Command Execution Issue)

컨테이너 실행 시에 도커 커맨드가 정상적으로 실행되지 않음을 의미한다.

  • 도커 커맨드가 실패하는 대표적인 이유
    • 올바르지 않은 옵션(플래그) 사용
    • 커맨드 호출 권한이 없는 경우
  • 해결 방법
    • 커맨드가정확한 문법으로 호출되는지 확인
    • 컨테이너를 실행하는 유저가 충분한 권한을 가지고 있는지 확인

Exit Code 126 (Command Invocation Issue)

컨테이너 실행 환경 내에서 지정된 커맨드를 호출할 수 없을 때 발생한다. (이미지 빌드 시 커맨드 호출 관련 Dependency 누락 혹은 런타임 환경 호환성 문제)

  • 해결 방법
    • 컨테이너 로그 확인을 통해 어떤 커맨드가 호출에 실패하는 지 확인
    • 올바르게 커맨드가 호출되었는지 확인 및 커맨드 호출에 필요한 Dependency 존재하는지 확인

Exit Code 127 (Command Not Found)

컨테이너에서 호출되는 커맨드가 존재하지 않을 때 발생한다.

  • 해결 방법
    • 올바르게 커맨드가 호출되었는지 확인 및 컨테이너의 파일 시스템 및 환경 구성 확인

Exit Code 128 (Invalid Argument to Exit)

컨테이너가 정상적으로 종료되었지만 유효하지 않은 종료 코드 (0 ~ 255 범위에 해당하지 않는 코드)를 반환한 경우에 발생한다.

  • 해결 방법
    • 유효하지 않은 종료 코드가 호출된 부분을 찾아서 유효한 종료 코드로 변경

Exit Code 134 (Abnormal Termination, SIGABRT)

컨테이너가 SIGABRT 시그널을 수신해서 종료되는 것을 의미한다.

SIGABRT: 프로그램 내부에서 비정상적인 상태를 감지하거나 치명적인 오류가 발생했을 때, 프로그램이 스스로 비정상 종료할 수 있도록 OS가 보내는 신호

  • 해결 방법
    • 프로그램 디버깅을 통해 발생 원인을 조사
    • 메모리 관리 문제 혹은 잘못된 메모리 액세스로 인해서 발생할 가능성도 존재하므로 메모리 할당/해제 부분 확인

Exit Code 137 (Immediate Termincation, SIGKILL)

컨테이너가 SIGKILL 시그널을 수신해서 강제 종료되는 것을 의미한다.

Graceful Termincation Period가 적용되지 않고 즉시 프로세스가 종료된다.

SIGKILL: 시스템에서 프로세스를 즉시 중단해야 할 필요가 있을 때 사용되는 신호로서 프로세스가 무시하거나 처리할 수 없다.

  • 해결 방법
    • 일반적으로 OOMKilled 상황에서 발생하기 때문에 컨테이너의 메모리 및 CPU 사용량을 확인
    • 컨테이너의 리소스를 적절하게 할당 (OOMKilled → 메모리 용량 증가)

Exit Code 139 (Segmentation Fault, SIGSEGV)

컨테이너가 SIGSEGV 시그널을 수신해서 종료된 것을 의미한다.

SIGSEGV: 운영체제가 잘못된 메모리 접근을 감지했을 때 발생하는 신호로서 프로그램이 할당되지 않은 메모리 영역에 접근하거나 읽기/쓰기 권한이 없는 메모리 영역 접근 시 발생된다.

  • 해결 방법
    • 일반적으로 해제된 메모리 재참조, 잘못된 초기화 등 메모리 관련 오류이기 때문에 프로그램 상에서 잘못된 메모리 접근이 일어나는 부분을 찾아 픽스

Exit Code 143 (Graceful Termination, SIGTERM)

컨테이너가 SIGTERM 시그널을 수신하고 정상 종료되는 것을 의미한다.

SIGTERM: 프로세스가 처리할 수 있는 시그널로 시그널을 수신한 프로세스는 핸들러를 통해 리소스 정리, 및 안정적인 종료 프로세스를 거칠 수 있다.

 

SIGTERM 시그널 수신 이후에 정상적으로 파일 및 리소스 정리를 하는지 로깅 등을 통해 확인할 수 있다.

 

쿠버네티스의 경우 terminationGracePeriodSeconds와 같은 옵션 지정을 통해 프로세스가 안정적으로 종료되도록 SIGKILL을 수신하는 시간을 유예할 수 있다.

마무리


 

컨테이너의 Exit Code에 대해서 정리해봤다.

 

쿠버네티스 환경에선 여러 가지 사유로 인해 컨테이너가 종료되는 케이스가 많은데 Exit Code를 정리함으로써 해당 이슈가 발생한 원인에 대한 방향성을 확인할 수 있다고 생각한다.

Reference


k8s for Data Engineer - Container Exit Codes: https://asrathore08.medium.com/k8s-for-data-engineer-container-exit-codes-59b28674996d


Exit Codes in Docker and Kubernetes: https://komodor.com/learn/exit-codes-in-containers-and-kubernetes-the-complete-guide/


Docker Documentation: https://docs.docker.com/engine/containers/run/#exit-status

 

Running containers

Running and configuring containers with the Docker CLI

docs.docker.com

 

 

Exit Codes in Docker and Kubernetes: The Complete Guide

Everything you need to know about exit codes used by container engines to indicate reasons for container termination.

komodor.com

 

 

K8s for Data Engineer — Container exit codes

exit code, their meaning & how to handle them

asrathore08.medium.com

 

 

반응형
저작자표시 비영리 변경금지 (새창열림)
    Zayson
    Zayson
    공부한 내용을 정리하는 공간

    티스토리툴바