← 아티클 목록

도커 컨테이너 로그 로테이션 — json-file max-size 설정

2028-01-10#docker#로그#운영

서버 디스크가 꽉 찼다는 알림을 받고 들어가 보면, 범인이 /var/lib/docker/containers/<id>/<id>-json.log 한 파일이 수십 GB로 부풀어 있는 경우가 많습니다. 도커 기본 로그 드라이버 json-file로그를 무한정 쌓기만 하고 자동으로 지우지 않기 때문입니다. 로테이션은 직접 켜야 합니다.

지금 로그가 얼마나 쌓였는지

로컬 터미널
# 컨테이너별 로그 파일 크기 확인
docker ps -q | xargs -I{} docker inspect --format \
  '{{.Name}} {{.LogPath}}' {} | while read n p; do echo "$n $(du -h $p)"; done

# 사용 중인 로그 드라이버 확인
docker inspect <container> --format '{{.HostConfig.LogConfig.Type}}'

LogPath가 가리키는 *-json.log 파일이 비정상적으로 크다면 로테이션이 꺼져 있는 것입니다.

두 가지 핵심 옵션

옵션역할예시
max-size로그 파일 하나의 최대 크기10m (10MB)
max-file보관할 회전 파일 개수3

max-size=10m, max-file=3이면 파일 하나가 10MB에 도달할 때 새 파일로 넘어가고, 최대 3개(총 약 30MB)까지만 유지한 뒤 가장 오래된 것을 지웁니다.

전역 기본값으로 한 번에

모든 신규 컨테이너에 적용하려면 데몬 설정에 기본값을 박습니다.

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

이 내용을 /etc/docker/daemon.json에 넣고 데몬을 재시작합니다.

서버 터미널
sudo systemctl restart docker

전역 설정은 재시작 이후 새로 만들어지는 컨테이너에만 적용됩니다. 이미 돌고 있는 컨테이너는 재생성해야 반영됩니다.

컨테이너·compose 단위 설정

특정 컨테이너만 다르게 두려면 실행 시 옵션을 줍니다.

Docker
docker run -d \
  --log-opt max-size=20m --log-opt max-file=5 \
  myapp:latest
YAML
services:
  web:
    image: myapp:latest
    logging:
      driver: json-file
      options:
        max-size: "20m"
        max-file: "5"

체크리스트

로컬 터미널
cat /etc/docker/daemon.json          # 전역 기본값 적용 여부
docker inspect <c> --format \
  '{{.HostConfig.LogConfig.Config}}' # 컨테이너별 옵션 확인
docker ps -q | xargs docker inspect --format \
  '{{.Name}} {{.HostConfig.LogConfig.Config}}'

핵심은 "기존 컨테이너에는 소급 적용되지 않는다"는 점입니다. daemon.json에 기본값을 박은 뒤, 이미 떠 있던 컨테이너는 한 번씩 재생성해 줘야 디스크가 다시 차오르지 않습니다.


로그를 일부러 쌓아 보며 max-size로 회전이 일어나는 과정을 확인하는 실습은 도커 트랙에서 무료로 할 수 있습니다.