컨테이너 로그 보기
컨테이너 로그 보기 (View container logs)
출처: 문서
본문
docker logs 명령은 실행 중인 컨테이너가 기록한 정보를 보여줘요. docker service logs 명령은 서비스에 참여하는 모든 컨테이너가 기록한 정보를 보여줘요. 기록되는 정보와 로그의 형식은 거의 전적으로 컨테이너의 엔드포인트 명령에 달려 있어요.
기본적으로 docker logs 또는 docker service logs는 터미널에서 명령을 대화형으로 실행했을 때 나타나는 그대로 명령의 출력을 보여줘요. Unix와 Linux 명령은 실행할 때 보통 STDIN, STDOUT, STDERR이라고 하는 세 개의 I/O 스트림을 열어요. STDIN은 키보드 입력이나 다른 명령의 입력을 포함할 수 있는 명령의 입력 스트림이에요. STDOUT은 보통 명령의 일반 출력이고, STDERR은 일반적으로 오류 메시지를 출력하는 데 사용돼요. 기본적으로 docker logs는 명령의 STDOUT과 STDERR을 보여줘요. I/O와 Linux에 대해 더 읽으려면 Linux Documentation Project의 I/O 리다이렉션에 관한 글을 보세요.
경우에 따라 docker logs는 추가 단계를 취하지 않는 한 유용한 정보를 보여주지 못할 수 있어요.
- 로그를 파일, 외부 호스트, 데이터베이스 또는 다른 로깅 백엔드로 보내는 로깅 드라이버를 사용하고 "이중 로깅"이 비활성화되어 있다면
docker logs가 유용한 정보를 보여주지 못할 수 있어요. - 이미지가 웹 서버나 데이터베이스 같은 비대화형 프로세스를 실행한다면 그 애플리케이션이
STDOUT과STDERR대신 로그 파일로 출력을 보낼 수 있어요.
첫 번째 경우 로그는 다른 방식으로 처리되며 docker logs를 사용하지 않기로 선택할 수 있어요. 두 번째 경우 공식 nginx 이미지가 한 가지 해결 방법을, 공식 Apache httpd 이미지가 다른 해결 방법을 보여줘요.
공식 nginx 이미지는 /var/log/nginx/access.log에서 /dev/stdout으로 심볼릭 링크를 만들고, /var/log/nginx/error.log에서 /dev/stderr로 또 다른 심볼릭 링크를 만들어 로그 파일을 덮어쓰고 로그를 관련 특수 디바이스로 보내요. Dockerfile 참고.
공식 httpd 드라이버는 httpd 애플리케이션의 구성을 변경해 일반 출력을 /proc/self/fd/1(즉 STDOUT)에, 오류를 /proc/self/fd/2(즉 STDERR)에 직접 쓰게 해요. Dockerfile 참고.