두 손끝의 창조자

/var/lib/docker 용량 폭증 본문

Docker

/var/lib/docker 용량 폭증

codinglog 2025. 12. 9. 14:42

최근 개발 서버에서 디스크 사용량 경고가 발생했다. 확인해보니 /var/lib/docker 디렉터리가 무려 359GB를 사용 중이었다. Docker를 사용하는 서버에서는 흔히 볼 수 있는 문제지만, 이번 사례는 특히 로그 파일 하나가 서버 전체 용량을 압도했던 흥미로운 케이스였기에 기록으로 남긴다.


1. 문제 발견: /var/lib/docker의 비정상적인 용량 증가

먼저 디스크 용량을 점검했다.

 
df -h

이 명령으로 실제 마운트된 디스크 중 어떤 파티션이 가득 찼는지 확인할 수 있다.
결과적으로 /var/lib/docker가 포함된 파티션이 거의 꽉 찬 상태였다.

Docker 내부 폴더별 용량 확인

문제를 좁히기 위해 Docker 내부 데이터를 분석했다.

 
sudo du -sh /var/lib/docker/*

이 명령을 통해 containers, volumes, overlay2, image 등 어떤 디렉터리가 디스크를 많이 차지하는지 빠르게 파악할 수 있다.


2. 원인 추적: 컨테이너 로그 파일 크기 검사

특히 Docker 로그(json-file)가 문제일 가능성이 높아 다음 명령을 실행했다.

 
sudo du -sh /var/lib/docker/containers/*/*-json.log

그리고 예상은 정확했다.

 
348G /var/lib/docker/containers/.../123cb1bf...-json.log 10M ... 48K ...

무려 348GB짜리 단일 로그 파일이 발견되었다.
즉, /var/lib/docker 359GB 중 거의 대부분의 원인이 바로 이 로그 파일이었다.


3. 추가 확인: 해당 컨테이너는 존재하는가?

로그 파일은 존재하지만, 실제 Docker 컨테이너가 남아 있는지 확인해보았다.

 
docker ps -a --no-trunc | grep 123cb1bf

컨테이너 목록에는 존재하지 않았다.
즉, **이미 삭제된 컨테이너의 로그 디렉터리만 남아 있는 ‘고아 orphan 로그 파일’**이라는 뜻이다.

이런 상황은 다음 경우에 흔히 발생한다.

  • 컨테이너 삭제 후 Docker가 로그 디렉터리를 제대로 정리하지 못함
  • Docker 데몬 비정상 종료 후 파일만 남는 경우
  • 오래된 Docker 버전 또는 overlay2 캐시 누적으로 청소 실패

4. 해결: 실행 중인 서비스에 영향 없이 로그 파일 초기화

컨테이너는 이미 존재하지 않았으므로, 용량을 즉시 확보하기 위해 아래 명령으로 로그 파일을 0바이트로 비웠다.

 
sudo truncate -s 0 \ /var/lib/docker/containers/123cb1bf0ba5cdf00ac984d925ef4cb3c3f0ae584808fd7a2ec84c5c82093b73/123cb1bf0ba5cdf00ac984d925ef4cb3c3f0ae584808fd7a2ec84c5c82093b73-json.log

이 명령은 파일을 삭제하는 것이 아니라 내용만 비워서 용량을 즉시 회수한다.
여기서만 348GB가 즉시 복구되었다.

필요하다면 디렉터리 전체를 삭제해도 무방하다.

 
sudo rm -rf /var/lib/docker/containers/123cb1bf0ba5cdf00ac984d925ef4cb3c3f0ae584808fd7a2ec84c5c82093b73

5. 재발 방지: 로그 로테이션 설정은 필수

Docker는 기본적으로 로그를 무제한 저장하는 구조이다.
즉, 로그 로테이션 설정이 없으면 같은 문제가 언제든 재발할 수 있다.

/etc/docker/daemon.json을 수정해 로그 크기를 제한한다.

 
{ "log-driver": "json-file", "log-opts": { "max-size": "50m", "max-file": "3" } }

적용:

 
sudo systemctl restart docker

이제 앞으로 컨테이너 로그 파일은 최대 150MB(50MB × 3)까지만 유지된다.


6. 마무리: 주요 교훈

이번 경험을 통해 다음을 다시 한 번 명확히 알 수 있었다.

  1. Docker 환경에서 디스크 부족이 발생하면 가장 먼저 컨테이너 로그 파일을 확인하자.
  2. 컨테이너가 이미 삭제되었더라도 고아 로그 파일은 계속 남아 있을 수 있다.
  3. 기본 설정만 사용하는 Docker는 로그를 무한정 쌓는다.
  4. 운영 서버라면 반드시 로그 로테이션 설정을 적용해야 한다.

348GB라는 대형 로그 파일 하나로 인해 시스템 장애가 발생할 뻔했지만,
문제를 정확히 파악하고 해결함으로써 빠르게 정상화할 수 있었다.
Docker 기반 운영 환경이라면 누구나 마주칠 수 있는 문제이기에,
비슷한 상황을 겪는 분들에게 도움이 되었으면 한다.

반응형
Comments