티스토리 뷰
Development/Docker & Kubernetes (K8s)
[Docker] docker logs 데이터는 어디에 저장될까 ? (MacOS)
KimDoubleB 2021. 9. 3. 09:29Docker 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
반응형
'Development > Docker & Kubernetes (K8s)' 카테고리의 다른 글
[Helm] 1. Helm 바로 사용해보기 (0) | 2021.10.01 |
---|---|
[Kubernetes/k8s] kubernetes logs 데이터는 어디에 저장될까 ? (2) | 2021.09.03 |
[Kubernetes/k8s] Logging Architecture (0) | 2021.08.10 |
Docker & Kubernetes - bash로 접속하기 (0) | 2021.08.09 |
[Istio] Istio DestinationRule 리소스 제공 옵션(Spec) 설명 (0) | 2021.07.06 |
댓글
반응형
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- gradle
- Algorithm
- Intellij
- 쿠버네티스
- 일상
- c++
- container
- Spring boot
- java
- tag
- 하루
- hexagonal architecture
- docker
- python
- 클린 아키텍처
- jasync
- 로그
- MySQL
- 백준
- k8s
- Log
- Spring
- 비동기
- Istio
- 알고리즘
- WebFlux
- boj
- Kubernetes
- HTTP
- Clean Architecture
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함