← 아티클 목록

도커 로그 관리 — 로그 드라이버와 디스크 폭증 해결

2027-02-22#docker#로깅#운영

docker logs <컨테이너>로 로그를 보는 건 익숙하지만, 운영에서 진짜 문제는 따로 있습니다. 어느 날 디스크가 꽉 차서 확인해 보면 /var/lib/docker/containers/.../*-json.log 한 파일이 수십 GB를 차지하고 있는 경우입니다. 도커는 기본적으로 컨테이너 표준출력을 무제한 json 파일에 계속 쌓기 때문입니다. 로그 드라이버와 로테이션을 이해하면 이 문제를 막을 수 있습니다.

1단계 — 지금 어떤 드라이버를 쓰는지 본다

로컬 터미널
# 데몬 기본 로그 드라이버
docker info --format '{{.LoggingDriver}}'

# 특정 컨테이너의 드라이버
docker inspect -f '{{.HostConfig.LogConfig.Type}}' <컨테이너>

# 로그 파일이 실제로 얼마나 큰지
sudo du -sh /var/lib/docker/containers/*/*-json.log

기본값이 json-file이고 옵션이 없다면, 로테이션 없이 무한히 커지는 상태입니다.

로그 드라이버 비교

드라이버특징언제 쓰나
json-file기본값, docker logs 사용 가능로테이션 옵션 필수
local압축·로테이션 내장, 더 효율적단일 호스트 운영 권장
journaldsystemd 저널로 전송호스트 로그와 통합 관리
none로그 비활성화로그가 불필요한 배치 작업

json-filelocaldocker logs가 동작하지만, journald로 보내면 journalctl로 봐야 합니다.

핵심 해결 — 로테이션을 강제한다

가장 중요한 설정은 파일 크기와 개수 제한입니다. 데몬 전체에 기본값을 주려면 /etc/docker/daemon.json을 수정합니다.

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

이러면 컨테이너당 로그가 10m 파일 3개, 즉 최대 30MB로 묶입니다. 적용은 데몬 재시작이 필요합니다.

서버 터미널
sudo systemctl restart docker

주의: daemon.json의 기본값은 새로 만드는 컨테이너에만 적용됩니다. 이미 떠 있는 컨테이너는 재생성해야 반영됩니다.

컨테이너별로 지정하기

데몬 전체가 아니라 특정 컨테이너만 제어하려면 실행 시 옵션을 줍니다.

Docker
docker run -d \
  --log-driver json-file \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  myapp

docker-compose.yml에서는 서비스 아래 logging.driverlogging.options로 같은 값을 지정합니다.

체크리스트

로컬 터미널
docker info --format '{{.LoggingDriver}}'              # 기본 드라이버 확인
sudo du -sh /var/lib/docker/containers/*/*-json.log    # 현재 로그 크기
docker inspect -f '{{.HostConfig.LogConfig}}' <컨테이너> # 로테이션 적용 여부

이미 비대해진 로그 파일은 컨테이너를 재생성하면 정리되며, 이후부터는 로테이션 안에서 관리됩니다.


로그 드라이버를 바꾸고 로테이션이 실제로 동작하는지 확인하는 실습은 도커 트랙에서 무료로 할 수 있습니다.