| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- mybatis
- VSCode
- useEffect
- dbeaver
- database
- log4j2
- JPA
- IntelliJ
- Kubernetes
- Git
- gson
- Spring
- LOG4J
- nginx
- Linux
- maven
- SAP
- MySQL
- NCP
- Windows
- gradle
- tibero
- docker
- JavaScript
- BPMN
- springboot
- nodejs
- sapfiorielements
- Java
- react
- Today
- Total
두 손끝의 창조자
/var/lib/docker 용량 폭증 본문
최근 개발 서버에서 디스크 사용량 경고가 발생했다. 확인해보니 /var/lib/docker 디렉터리가 무려 359GB를 사용 중이었다. Docker를 사용하는 서버에서는 흔히 볼 수 있는 문제지만, 이번 사례는 특히 로그 파일 하나가 서버 전체 용량을 압도했던 흥미로운 케이스였기에 기록으로 남긴다.
1. 문제 발견: /var/lib/docker의 비정상적인 용량 증가
먼저 디스크 용량을 점검했다.
이 명령으로 실제 마운트된 디스크 중 어떤 파티션이 가득 찼는지 확인할 수 있다.
결과적으로 /var/lib/docker가 포함된 파티션이 거의 꽉 찬 상태였다.
Docker 내부 폴더별 용량 확인
문제를 좁히기 위해 Docker 내부 데이터를 분석했다.
이 명령을 통해 containers, volumes, overlay2, image 등 어떤 디렉터리가 디스크를 많이 차지하는지 빠르게 파악할 수 있다.
2. 원인 추적: 컨테이너 로그 파일 크기 검사
특히 Docker 로그(json-file)가 문제일 가능성이 높아 다음 명령을 실행했다.
그리고 예상은 정확했다.
무려 348GB짜리 단일 로그 파일이 발견되었다.
즉, /var/lib/docker 359GB 중 거의 대부분의 원인이 바로 이 로그 파일이었다.
3. 추가 확인: 해당 컨테이너는 존재하는가?
로그 파일은 존재하지만, 실제 Docker 컨테이너가 남아 있는지 확인해보았다.
컨테이너 목록에는 존재하지 않았다.
즉, **이미 삭제된 컨테이너의 로그 디렉터리만 남아 있는 ‘고아 orphan 로그 파일’**이라는 뜻이다.
이런 상황은 다음 경우에 흔히 발생한다.
- 컨테이너 삭제 후 Docker가 로그 디렉터리를 제대로 정리하지 못함
- Docker 데몬 비정상 종료 후 파일만 남는 경우
- 오래된 Docker 버전 또는 overlay2 캐시 누적으로 청소 실패
4. 해결: 실행 중인 서비스에 영향 없이 로그 파일 초기화
컨테이너는 이미 존재하지 않았으므로, 용량을 즉시 확보하기 위해 아래 명령으로 로그 파일을 0바이트로 비웠다.
이 명령은 파일을 삭제하는 것이 아니라 내용만 비워서 용량을 즉시 회수한다.
여기서만 348GB가 즉시 복구되었다.
필요하다면 디렉터리 전체를 삭제해도 무방하다.
5. 재발 방지: 로그 로테이션 설정은 필수
Docker는 기본적으로 로그를 무제한 저장하는 구조이다.
즉, 로그 로테이션 설정이 없으면 같은 문제가 언제든 재발할 수 있다.
/etc/docker/daemon.json을 수정해 로그 크기를 제한한다.
적용:
이제 앞으로 컨테이너 로그 파일은 최대 150MB(50MB × 3)까지만 유지된다.
6. 마무리: 주요 교훈
이번 경험을 통해 다음을 다시 한 번 명확히 알 수 있었다.
- Docker 환경에서 디스크 부족이 발생하면 가장 먼저 컨테이너 로그 파일을 확인하자.
- 컨테이너가 이미 삭제되었더라도 고아 로그 파일은 계속 남아 있을 수 있다.
- 기본 설정만 사용하는 Docker는 로그를 무한정 쌓는다.
- 운영 서버라면 반드시 로그 로테이션 설정을 적용해야 한다.
348GB라는 대형 로그 파일 하나로 인해 시스템 장애가 발생할 뻔했지만,
문제를 정확히 파악하고 해결함으로써 빠르게 정상화할 수 있었다.
Docker 기반 운영 환경이라면 누구나 마주칠 수 있는 문제이기에,
비슷한 상황을 겪는 분들에게 도움이 되었으면 한다.