1. 개요

 

운영 중인 Docker 호스트에서 특정 컨테이너(Grafana)가 docker stop, docker kill, docker exec 등의 명령에 응답하지 않고, 다른 컨테이너는 정상 동작하는 상황이 발생하였다.

본 문서는 해당 현상의 원인 분석 과정과 현실적인 대응 방안을 정리한다.

 


 

2. 증상 요약

 

  • docker ps 상 컨테이너는 Up 상태
  • docker stop / kill / exec 명령이 특정 컨테이너에서만 실패
  • 다른 컨테이너 및 docker 명령은 정상 동작
  • 호스트 재기동은 즉시 불가
  • 디스크 사용률 99% 상태 확인
  • ps 결과에서 해당 컨테이너 프로세스 상태가 Sl로 표시
  • containerd-shim 프로세스가 지속적으로 존재

 


 

3. 주요 점검 내용

 

 

3.1 Docker 데이터 루트 확인

docker info | grep -i "Docker Root Dir"
df -h <Docker Root Dir 경로>

 

  • Docker data-root는 특정 디렉토리이나, 실제 파일시스템은 루트 디스크(/)를 사용 중
  • OverlayFS 특성상 루트 파일시스템 사용량 증가와 직결됨

 


 

3.2 디스크 사용량 분석

df -h
docker system df

관찰 사항:

 

  • /var/lib/docker/overlay2 관련 overlay 마운트 다수
  • Docker Images, Local Volumes, Build Cache에서 reclaimable 비율 매우 높음
  • 디스크 full 상태가 컨테이너 비정상 동작의 직접적인 트리거로 판단됨

 


 

3.3 이미지/볼륨 상태

docker system df

 

  • 사용 중이지 않은 이미지 다수 존재
  • 태그가 없는(dangling) 이미지뿐 아니라, 컨테이너에 참조되지 않는 태그 이미지도 포함
  • Local Volume에서 대용량 reclaimable 공간 확인

 


 

3.4 프로세스 상태 확인

docker inspect <container_id> | grep Pid
ps -eo pid,stat,cmd | grep <container_id>

 

  • containerd-shim 프로세스가 존재
  • 프로세스 상태 Sl
  • SIGKILL이 즉시 반영되지 않음

 


 

4. 원인 분석

 

본 현상은 다음 요인이 복합적으로 작용한 결과로 판단된다.

 

  1. Docker 데이터 영역 디스크 full
  2. Grafana 특성상 지속적인 디스크 I/O 발생
  3. OverlayFS + containerd-shim 구조
  4. 커널 레벨에서 I/O 관련 리소스 대기 상태 진입

 

결과적으로 컨테이너 프로세스가 커널 리소스를 점유한 채 해제되지 않는 상태가 되었으며, Docker/Containerd 레벨에서는 해당 프로세스를 강제 종료할 수 없는 상태로 판단된다.

 


 

5. containerd-shim 설명

 

  • containerd와 실제 컨테이너 프로세스 사이의 중계 프로세스
  • 컨테이너 표준 입출력 및 생명주기 관리 담당
  • 컨테이너 프로세스가 커널 레벨에서 block될 경우 shim도 함께 해제 불가 상태가 될 수 있음

 


 

6. 대응 방안 정리

 

 

6.1 즉시 가능한 조치 (서비스 유지 목적)

 

  • 사용하지 않는 이미지/볼륨/빌드 캐시 정리
docker image prune -a
docker volume prune
docker builder prune -a

 

  • 문제 컨테이너를 대체하는 신규 컨테이너 기동
  • 기존 좀비 컨테이너는 유지한 채 우회 운영

 


 

6.2 containerd 재기동 판단

systemctl restart containerd

 

  • 시도는 가능하나 성공 보장 없음
  • 커널 D state 또는 I/O block 상태에서는 효과 제한적
  • 다른 정상 컨테이너에 영향 가능성 존재

 


 

6.3 근본 해결

 

  • 호스트 머신 재기동
    • 커널 리소스 초기화
    • zombie / orphan containerd-shim 정리
    • Docker/Containerd 상태 일관성 복구
  •  

 

운영 중인 서비스 특성상 점검 시간 확보 후 재기동 권장

 


 

7. 결론

 

  • 특정 컨테이너만 종료되지 않는 현상은 Docker 문제가 아닌 커널 및 스토리지 리소스 상태 문제일 가능성이 높음
  • 디스크 full 상태는 Docker 컨테이너 안정성에 직접적인 영향을 미침
  • containerd 재기동은 임시 시도 수단이며, 확실한 복구는 호스트 재기동
  • 재발 방지를 위해 Docker data-root 분리 및 주기적인 이미지/볼륨 정리 필요

 


 

8. 운영 권고 사항

 

  • Docker 데이터 디스크 분리 운영
  • 로그 로테이션 및 모니터링 설정
  • docker system df 정기 점검
  • 디스크 사용률 임계치 알람 설정

 


 

+ Recent posts