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 inspect
의 HostConfig
에서도 이와 관련된 정보를 확인 할 수 있다.
...
"HostConfig": {
...
"LogConfig": {
"Type": "json-file"
...
}
...
}