3줄 요약

  • Docker 컨테이너의 콘솔 로그는 시스템 메모리가 아닌 호스트의 디스크에 파일로 저장됩니다.
  • docker logs 명령어는 이 저장된 파일을 읽어와 보여주는 역할을 합니다.
  • 로그 파일이 무한정 커지는 것을 방지하려면 로그 로테이션 옵션(max-size, max-file)을 설정하는 것이 매우 중요합니다.

1. 로그는 어디에 어떻게 저장되나요?

Docker는 컨테이너의 표준 출력(stdout)과 표준 에러(stderr) 스트림을 모두 캡처하여 로깅 드라이버(Logging Driver) 를 통해 처리합니다. 특별한 설정을 하지 않았다면, Docker는 기본적으로 json-file 로깅 드라이버를 사용합니다.

  • 저장 위치: 컨테이너의 로그는 호스트 시스템의 특정 경로에 JSON 형식의 파일로 저장됩니다. 일반적으로 경로는 다음과 같습니다.
    • /var/lib/docker/containers/[컨테이너_ID]/[컨테이너_ID]-json.log
  • docker logs 명령어: 이 명령어는 사실 메모리에 있는 내용을 보여주는 것이 아니라, 위에 언급된 JSON 로그 파일을 읽어서 터미널에 보여주는 것입니다.

ChatGPT Image 2026년 5월 12일 오후 12_37_29.png

2. 로그가 계속 쌓이면 디스크 용량이 부족해지지 않나요?

네, 맞습니다. 아무런 조치를 하지 않으면 로그 파일이 계속 커져서 호스트의 디스크 용량을 모두 차지할 수 있습니다. 이를 방지하기 위해 Docker는 로그 파일의 크기와 개수를 제한하는 로그 로테이션(Log Rotation) 옵션을 제공합니다.

예를 들어, docker run 명령어를 실행할 때 다음과 같은 옵션을 추가할 수 있습니다.

docker run -d \
  --log-driver json-file \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  nginx
  • --log-opt max-size=10m: 로그 파일 하나의 최대 크기를 10MB로 제한합니다.
  • --log-opt max-file=3: 로그 파일의 최대 개수를 3개로 제한합니다. 3개가 넘어가면 가장 오래된 파일부터 삭제됩니다.

이렇게 설정하면 해당 컨테이너의 로그는 최대 30MB(10MB * 3개)까지만 디스크 공간을 사용하게 됩니다.


3. docker-compose.yml 파일에 설정하기

Docker Compose에서는 docker-compose.yml 파일 안에서 각 서비스별로 로깅 옵션을 아주 쉽게 설정할 수 있습니다.

docker run 명령어의 --log-opt 플래그가 YAML 형식으로 들어간다고 생각하시면 됩니다.

아래는 my-app이라는 서비스에 로그 로테이션을 적용하는 예시입니다.

services:
  my-app:
    image: your-app-image
    # ... 다른 설정들 ...
    deploy:
      resources:
        limits:
          memory: 512M

    # 👇 이 부분이 로그 설정입니다.
    logging:
      driver: "json-file"  # 사용할 로깅 드라이버 (기본값이므로 생략 가능)
      options:
        max-size: "10m"    # 파일당 최대 크기: 10MB
        max-file: "3"      # 최대 파일 개수: 3개
  • logging: 해당 서비스의 로깅 설정을 시작하는 키입니다.
  • driver: 사용할 로깅 드라이버를 지정합니다. json-file이 기본값입니다.
  • options: 드라이버에 전달할 옵션을 설정합니다.
    • max-size: docker run--log-opt max-size와 동일합니다.
    • max-file: docker run--log-opt max-file과 동일합니다.

이제 docker-compose up으로 이 서비스를 시작하면, my-app 컨테이너의 로그는 자동으로 로테이션되어 최대 30MB(10MB * 3개)의 디스크 공간만 사용하게 됩니다.

4. 모든 컨테이너에 기본값으로 설정하기

만약 모든 컨테이너에 일일이 옵션을 주기 번거롭고, 시스템 전체에 기본 정책을 적용하고 싶다면 Docker 데몬(Daemon) 설정 파일을 수정하는 방법이 가장 좋습니다.

  1. /etc/docker/daemon.json 파일을 열거나 생성합니다. (파일이 없다면 새로 만드세요.)
  2. 아래와 같이 내용을 작성합니다.
{
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "10m",
        "max-file": "3"
    }
}

3. [[Docker]] 데몬을 재시작합니다.

sudo systemctl restart docker

이렇게 설정하면, 앞으로 생성되는 모든 컨테이너는 별도의 로깅 설정을 하지 않는 한 자동으로 이 정책을 따르게 됩니다. 물론, docker-compose.yml 파일이나 docker run 명령어에서 특정 컨테이너에 대해 다른 로깅 옵션을 지정하면 개별 설정이 데몬 설정보다 우선 적용됩니다.

  • 개별 서비스 설정: docker-compose.yml 파일 내의 logging 섹션에서 설정하는 것이 가장 일반적이고 편리합니다.
  • 글로벌 기본 설정: 서버의 모든 컨테이너에 일괄적인 정책을 적용하려면 /etc/docker/daemon.json 파일을 수정하세요.