Dev/Docker

Docker 컨테이너 로그 기본 정보와 관리하는 방법

싹다배워 2026. 1. 15. 13:48
반응형

1. 작업 배경

운영 중인 서버에 서비스들을 Docker 컨테이너로 신규 구성하면서 로그가 파일로 남지 않고 docker logs 명령어에서만 확인되는 현상을 발견했다.

docker logs -f <컨테이너명>

- 애플리케이션은 정상 동작

- 콘솔 로그는 확인 가능하지만 서버 디렉토리에는 로그 파일 생성x

 

처음에는 애플리케이션 로그 설정 문제로 판단했으나, 확인 결과 이는 Docker 기본 로그 동작 방식 때문이었음.


2. Docker 컨테이너 로그의 기본 동작 방식

도커에서 별도의 설정을 하지 않으면 로그는 아래와 같이 처리된다.

기본 로그 드라이버

  • json-file (Docker 기본값)

로그 수집 대상

  • 표준 출력 (STDOUT)
  • 표준 에러 (STDERR)

즉, Spring Boot  애플리케이션의 콘솔 로그는 파일이 아니라 Docker 내부 로그 파일로 저장된다.


3. 도커 로그는 어디에 저장?

/var/lib/docker/containers/<컨테이너ID>/<컨테이너ID>-json.log

//ex) /var/lib/docker/containers/afs241asd/afs241asd-json.log

실제 로그는 위 경로로 저장되지만 사람이 직접 열어보는 용도는 아님


4. 애플리케이션 로그 파일이 생성되지 않았던 이유

Spring Boot 애플리케이션 내부에는 logback-spring.xml이 존재했고 RollingFileAppender 설정도 되어 있었다.

하지만 도커 컨테이너에서는 로그는 생성되고 있지만 컨테이너 내부에만 존재해서 서버에서 보이지 않았던 것이었다.


5. 파일 로그 + 볼륨 마운트

volumes:
  - /../도커경로/컨테이너명/log:/app/log

docker-compose.yml 파일에서 위와 같이 설정할 경우 컨테이너 내부 로그를 서버 디렉토리로 직접 저장한다는 내용이다.

장점으론 로그 백업 및 분석에 용이하겠지만, 단점으론 볼륨 관리가 필요하고 컨테이너 의존성이 증가한다.


6. 도커 로그 관리 (무한 증가 방지 설정)

// /etc/docker/daemon.json

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "7"
  }
}

도커 로그를 별도 설정하지 않을 경우 위와 같은 설정을 통해 전역으로 로그 제한을 걸 수 있다.

  • 로그 파일 1개당 최대 100MB
  • 최대 7개까지 유지 (총 100MB * 7이므로 700MB)
  • 초과 시 자동 삭제

대신 위와 같이 설정 시 Docker 데몬 재기동이 필요하다.

systemctl restart docker

반응형

'Dev > Docker' 카테고리의 다른 글

Docker 관리 도구(Portainer) 도입 시 겪은 시행착오 정리  (0) 2026.01.16