Profile picture

[Docker] 도커 로그(log)

JaehyoJJAng2023년 04월 06일

STDOUT / STDERR

Docker container log는 stdout, stderr, streams로 Log를 찍는다.

  • 기본적으로 이러한 log는 Docker host에 JSON file로 저장된다.
  • Default logging driver로 json-file logging driver를 사용하기 때문이다.

image


로그 확인

전체 로그 확인

$ docker logs [container]

마지막 로그 10줄 확인

$ docker logs --tail 10 [container]

실시간 로그 스트림 확인

$ docker logs -f [container]

로그마다 타임스탬프 표시

$ docker logs -f -t [container]

호스트 운영체제의 로그 저장 경로

  • log driver = json-file 인 경우에만 유효

로그 파일 경로

$ cat /var/lib/docker/containers/${CONTAINER_ID}/${CONTAINER_ID}-json.log

로그 파일 찾기

# 권한이 필요하기 때문에 슈퍼유저로 변경 후 진행
$ sudo su

$ find /var/lib/docker -name "*json.log" 2>/dev/null | xargs -I / cat /

OR

$ find /var/lib/docker -name "*json.log" 2>/dev/null -exec sh -c "cat {}" \;

... 생략 ...
{"log":"2023/05/08 08:51:21 [notice] 1#1: start worker process 19\r\n","stream":"stdout","time":"2023-05-08T08:51:21.969915631Z"}

실행 중인 특정 컨테이너의 log 위치를 알고싶다면, docker inspect 명령어를 사용하면 된다.

$ docker inspect <container_id> --format {% raw %} "{{.LogPath}}" {% endraw %}

로그 용량 제한

  • 컨테이너 단위로 로그 용량 제한을 할 수 있지만, 도커 엔진에서 기본 설정을 진행할 수도 있다.
  • 운영환경(production)에서 필수 설정

한 로그 파일당 최대 크기를 3Mb로 제한하고, 최대 로그 파일 3개로 로테이팅

$ docker run -d -it --name nginx -p 80:80 --rm \
  --log-driver=json-file \
  --log-opt max-size=3m \
  --log-opt max-file=5 \
  nginx:latest

Loading script...