피드로 돌아가기
Why My Spark Container Keeps Exiting — Docker PID 1 and the Daemon Trap
Dev.toDev.to
Infrastructure

PID 1 생명주기 제어를 통한 Spark 컨테이너 강제 종료 문제 해결

Why My Spark Container Keeps Exiting — Docker PID 1 and the Daemon Trap

Lee Yao2026년 5월 7일7intermediate

Context

CMS Medicare 스트리밍 파이프라인 구축을 위해 Docker Compose 기반의 Spark 클러스터 구성 시도. Bare-metal 환경용 스크립트인 start-master.sh 사용으로 인한 프로세스 백그라운드 실행 및 PID 1 종료 현상 발생.

Technical Solution

  • Docker의 PID 1 종료 시 컨테이너가 즉시 파괴되는 생명주기 메커니즘 분석
  • start-master.sh 내 '&' 연산자로 인한 Java 프로세스의 백그라운드 전환 및 쉘 스크립트(PID 1)의 즉각적 종료 과정 식별
  • 'exec' 명령어를 통한 쉘 프로세스의 Java 프로세스 대체로 Spark Master를 PID 1로 유지하는 구조 설계
  • tail -f 로그 스트리밍을 결합한 Custom Entrypoint 스크립트로 Foreground 프로세스 유지 및 표준 출력 확보
  • 이미지 제공자별 Entrypoint 설계 차이 분석을 통한 환경 변수 및 실행 명령어 최적화

- Docker 이미지 내 실행 스크립트에 '&' 또는 'nohup' 사용 여부 확인 - 서비스 프로세스가 PID 1을 점유하도록 'exec' 명령어를 통한 프로세스 교체 적용 - 제3자 제공 이미지 사용 시 Entrypoint 스크립트와 환경 변수 정의서 사전 검토 - 컨테이너 로그 확인을 위한 Foreground 블로킹 프로세스(예: tail -f) 배치 고려

원문 읽기