티스토리 뷰

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

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

 

 

Docker log의 저장 위치에 대해 찾아본다면, 아래의 주소에 저장된다고 나온다.

  • /var/lib/docker/containers/<container_id>/<container_id>-json.log

 

 

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

  • docker inspect <container_id> --format "{{.LogPath}}"

만약 container_id가 950925 라면, 위 command를 통해 대략적으로 아래와 같은 결과를 볼 수 있을 것이다.

  • /var/lib/docker/containers/950925/950925-json.log

 

 

하지만 MacOS 환경이라면 위 경로가 존재하지 않는다는 것을 확인할 수 있다.

$ cat /var/lib/docker/containers/950925/950925-json.log
cat: /var/lib/docker/containers/950925/950925-json.log : No such file or directory
  • 그럼 도대체 어디에 저장되어있고, 해당 경로는 무엇인가?

 

 

단서는 macOS 위에서 바로 container runtime(containerd)을 실행시키지 않는다는 것에 있다.

  • macOS에서는 containerd 를 HyperKit, LinuxKit 위에서 실행시키게 된다.
    • HyperKit: virtualized environment
    • LinuxKit: lightweight Linux

 

 

즉, 위에서 나온 Log의 위치는 containerd 가 직접 구동되는 LinuxKit 내부에서의 경로이다.

그럼, 직접 LinuxKit에 접속해보자. LinuxKit은 docker for mac 설치 시 함께 설치된 debug-shell.sock 을 이용하면 된다.

  • nc -U ~/Library/Containers/com.docker.docker/Data/debug-shell.sock
  • 들어가면, Linux 서버에 들어온 것처럼 CLI가 나오게 된다.

 

 

이제 앞에서 찾지 못했던 docker log를 입력해보자.

  • 그럼 log들이 json 형태로 나오는 것을 확인할 수 있다.
$ nc -U ~/Library/Containers/com.docker.docker/Data/debug-shell.sock

/ $ ls
bin         etc         media       proc        sbin        tmp
containers  home        mnt         root        srv         usr
dev         lib         opt         run         sys         var

/ $ cat /var/lib/docker/containers/950925/950925-json.log'
...
{"log":"\u001bM\r\u001b[K[\u001b[0m\u001b[0;31m*     \u001b[0m] A start job is running for Docker A… Container Engine (16s / no limit)\r\n","stream":"stdout","time":"2021-08-31T04:54:57.293550184Z"}
{"log":"\u001bM\r\u001b[K[\u001b[0;32m  OK  \u001b[0m] Started \u001b[0;1;39mDocker Application Container Engine\u001b[0m.\r\n","stream":"stdout","time":"2021-08-31T04:54:57.430149239Z"}
{"log":"\u001b[K[\u001b[0;32m  OK  \u001b[0m] Reached target \u001b[0;1;39mMulti-User System\u001b[0m.\r\n","stream":"stdout","time":"2021-08-31T04:54:57.43074611Z"}
{"log":"[\u001b[0;32m  OK  \u001b[0m] Reached target \u001b[0;1;39mGraphical Interface\u001b[0m.\r\n","stream":"stdout","time":"2021-08-31T04:54:57.430763658Z"}
{"log":"         Starting \u001b[0;1;39mUpdate UTMP about System Runlevel Changes\u001b[0m...\r\n","stream":"stdout","time":"2021-08-31T04:54:57.439452343Z"}
{"log":"[\u001b[0;32m  OK  \u001b[0m] Finished \u001b[0;1;39mUpdate UTMP about System Runlevel Changes\u001b[0m.\r\n","stream":"stdout","time":"2021-08-31T04:54:57.462579667Z"}
...
320x100
반응형
댓글
반응형
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함