Docker log

Younghwan Cha·2023년 1월 26일
0

Docker

목록 보기
10/18
post-thumbnail

docker container 의 로그를 보고싶다면 docker logs 명령어를 사용하면 된다.

docker logs <container-name>

# follow, 로그를 연속으로 출력
docker logs -f <container-name>

# 마지막 20 줄의 로그만을 출력
docker logs --tail 20 <container-name>

# 로그에 timestamp 표기
docker logs --timestamps <container-name>

그렇다면, docker 에서는 이 로그들은 어디서 가져오는 것일까?

결론부터 말하자면 docker logs 명령어는 컨테이너의
/dev/stdout, /dev/stdin, /dev/stderr 을 보여주는 명령어이다.

nginx container 를 예로 들어보자.
nginx 의 로그가 저장되는 /var/log/nginx/ 경로에서 ls -al 을 해보면

다음과 같이 symbolic link 가 걸려있는 것을 볼 수 있다.
( symbolic link 관련해서는 다음을 참조 https://velog.io/@younghwan/ln )

  • access.log -> /dev/stdout
  • error.log -> /dev/stderr

이는 nginx access, error log 가 발생했을 경우 /var/log/nginx/ 아래 access.log, error.log 파일에 로그가 기록되며, 이는 symbolic link 된 /dev/stdout, 표준 출력으로 나가게 된다. 로그는 json 형식으로 저장되는데, 이는 default logging driver 가 JSON-File 로 설정되어 있기 때문이다. 이와 같은 설정들에 관해서는 아래 경로에서 확인 할 수 있다.

/etc/docker/daemon.json

{
  "experimental": true,
  "log-driver": "json-file",
  "log-opts": { "max-size": "20m", "max-file": "3" },
  "data-root": "/mnt/docker"
}

또한, docker inspectHostConfig 에서도 이와 관련된 정보를 확인 할 수 있다.

...
"HostConfig": {
	...
    "LogConfig": {
    	"Type": "json-file"
        ...
    }
    ...
}

[ref]
https://silentbrain.tistory.com/20

profile
개발 기록

0개의 댓글