STDOUT / STDERR
Docker container log는 stdout, stderr, streams로 Log를 찍는다.
- 기본적으로 이러한 log는 Docker host에 JSON file로 저장된다.
- Default logging driver로 json-file logging driver를 사용하기 때문이다.
로그 확인
전체 로그 확인
$ 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