피드로 돌아가기
Dev.toInfrastructure
원문 읽기
PID 1 생명주기 제어를 통한 Spark 컨테이너 강제 종료 문제 해결
Why My Spark Container Keeps Exiting — Docker PID 1 and the Daemon Trap
AI 요약
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) 배치 고려