데몬 로그 읽기
데몬 로그 읽기 (Read the daemon logs)
데몬 로그는 문제를 진단하는 데 도움이 될 수 있어요. 로그는 운영 체제 구성과 사용되는 로깅 하위 시스템에 따라 몇 가지 위치 중 하나에 저장될 수 있어요:
| Operating system | Location |
|---|---|
| Linux | journalctl -xu docker.service 명령 사용(또는 Linux 배포판에 따라 /var/log/syslog 또는 /var/log/messages 읽기) |
| macOS (Docker Desktop) | ~/Library/Containers/com.docker.docker/Data/log/vm/init.log |
| Windows (WSL2) | %LOCALAPPDATA%\Docker\log\vm\init.log |
| Windows (Windows containers) | 로그는 Windows 이벤트 로그에 있음 |
출처: 문서
본문
macOS와 Windows(WSL2)에서 Docker Desktop은 데몬 로그(dockerd, containerd, 기타 VM 서비스)를 JSON 형식의 단일 다중화된 init.log 파일에 써요. 각 줄에는 서비스를 식별하는 "component" 필드가 있어요. 로그를 팔로우하려면 터미널을 열고 -f 플래그와 함께 tail 명령을 사용해요. CTRL+c로 명령을 종료할 때까지 로그가 출력돼요:
$ tail -f ~/Library/Containers/com.docker.docker/Data/log/vm/init.log
{"component":"dockerd","level":"debug","msg":"attach: stdout: begin","time":"2021-07-28T10:21:21.497642089Z"}
{"component":"dockerd","level":"debug","msg":"attach: stderr: begin","time":"2021-07-28T10:21:21.497714291Z"}
...
^C
dockerd 출력만 필터링하려면:
$ grep '"component":"dockerd"' ~/Library/Containers/com.docker.docker/Data/log/vm/init.log
디버깅 활성화 (Enable debugging)
디버깅을 활성화하는 두 가지 방법이 있어요. 권장되는 방법은 daemon.json 파일의 debug 키를 true로 설정하는 거예요. 이 방법은 모든 Docker 플랫폼에서 동작해요.
- 보통
/etc/docker/에 있는daemon.json파일을 편집해요. 아직 없으면 이 파일을 만들어야 할 수도 있어요. macOS나 Windows에서는 파일을 직접 편집하지 마세요. 대신 Docker Desktop 설정을 통해 파일을 편집해요. - 파일이 비어 있으면 다음을 추가해요:
{
"debug": true
}
파일이 이미 JSON을 담고 있으면 키 "debug": true만 추가하고, 닫는 괄호 앞의 마지막 줄이 아니면 줄 끝에 쉼표를 추가하는 데 주의해요. log-level 키가 설정된 경우 info 또는 debug로 설정되어 있는지도 확인해요. info가 기본값이고, 가능한 값은 debug, info, warn, error, fatal이에요.
- 데몬에
HUP신호를 보내 구성을 리로드하게 해요. Linux 호스트에서는 다음 명령을 사용해요.
$ sudo kill -SIGHUP $(pidof dockerd)
Windows 호스트에서는 Docker를 재시작해요.
이 절차를 따르는 대신 Docker 데몬을 중지하고 디버그 플래그 -D로 수동으로 재시작할 수도 있어요. 하지만 이렇게 하면 Docker가 호스트의 시작 스크립트가 만드는 환경과 다른 환경으로 재시작될 수 있고, 이는 디버깅을 더 어렵게 만들 수 있어요.
스택 트레이스 로그 강제 (Force a stack trace to be logged)
데몬이 응답하지 않으면 데몬에 SIGUSR1 신호를 보내 전체 스택 트레이스가 기록되도록 강제할 수 있어요.
- Linux:
$ sudo kill -SIGUSR1 $(pidof dockerd)
- Windows Server:
docker-signal을 다운로드해요.
Get-Process dockerd로 dockerd의 프로세스 ID를 얻어요.--pid=<PID of daemon>플래그로 실행 파일을 실행해요.
이렇게 하면 스택 트레이스가 기록되도록 강제하지만 데몬을 중지하지는 않아요. 데몬 로그에 스택 트레이스 또는 파일에 기록된 경우 그 파일의 경로가 표시돼요.
데몬은 SIGUSR1 신호를 처리하고 스택 트레이스를 로그에 덤프한 후 계속 동작해요. 스택 트레이스는 데몬 내 모든 goroutine과 스레드의 상태를 결정하는 데 사용될 수 있어요.
스택 트레이스 보기 (View stack traces)
Docker 데몬 로그는 다음 방법 중 하나로 볼 수 있어요:
systemctl을 사용하는 Linux 시스템에서journalctl -u docker.service실행- 오래된 Linux 시스템의
/var/log/messages,/var/log/daemon.log, 또는/var/log/docker.log
Note Docker Desktop for Mac 또는 Docker Desktop for Windows에서는 스택 트레이스를 수동으로 생성할 수 없어요. 하지만 문제가 발생하면 Docker 작업 표시줄 아이콘을 클릭하고 Troubleshoot를 선택해 Docker에 정보를 보낼 수 있어요.
Docker 로그에서 다음과 같은 메시지를 찾아보세요:
...goroutine stacks written to /var/run/docker/goroutine-stacks-2017-06-02T193336z.log
Docker가 이러한 스택 트레이스와 덤프를 저장하는 위치는 운영 체제와 구성에 따라 달라져요. 때로는 스택 트레이스와 덤프에서 바로 유용한 진단 정보를 얻을 수 있어요. 그렇지 않으면 이 정보를 Docker에 제공해 문제 진단에 도움을 받을 수 있어요.