Docker 로그에서 grep 명령어가 작동하지 않는 이유와 해결 방법
Docker 로그를 확인하다 보면 특정 키워드만 검색하고 싶은 경우가 많습니다. grep 명령어는 일반적으로 로그 검색에 사용되지만, 도커 로그에서는 의도대로 작동하지 않을 때가 있습니다. 이번 글에서는 이 문제의 원인과 해결 방법에 대해 알아보겠습니다.
문제 상황
docker logs 명령어로 로그를 출력한 뒤 grep을 사용했을 때, 결과가 예상대로 나오지 않을 수 있습니다. 예를 들어
docker logs container_dev | grep exception
위 명령어가 제대로 동작하지 않는 경우가 있습니다. 이 문제는 docker logs가 출력하는 로그 스트림의 특성과 관련이 있습니다.
원인
Docker 컨테이너의 로그는 기본적으로 두 가지 스트림으로 나뉩니다.
- 표준 출력(stdout)
- 표준 에러(stderr)
docker logs 명령어는 이 두 스트림을 각각 출력하며, grep은 기본적으로 표준 출력만 필터링합니다. 따라서 표준 에러(stderr)에 기록된 로그는 grep으로 필터링되지 않습니다.
해결 방법
이 문제를 해결하기 위해, 표준 출력(stdout)과 표준 에러(stderr)를 하나의 스트림으로 합친 뒤 grep을 사용할 수 있습니다. 이를 위해 2>&1 리다이렉션을 사용합니다.
docker logs container_dev 2>&1 | grep exception
- 2>&1: 표준 에러(stderr, 2번)를 표준 출력(stdout, 1번)으로 리다이렉트합니다.
- | grep exception: 합쳐진 출력 스트림에서 "exception"이라는 키워드를 검색합니다.
실시간 로그 모니터링
컨테이너 로그를 실시간으로 모니터링하면서 특정 키워드를 검색하고 싶다면 -f 플래그를 사용할 수 있습니다.
docker logs -f --tail 100 container_dev 2>&1 | grep exception
- -f: 로그를 실시간으로 스트리밍합니다.
- --tail 100: 최근 100줄의 로그를 출력한 후 스트리밍을 시작합니다.
추가 팁 - 로그 검색을 더 효율적으로
- 컬러 하이라이트: grep에 --color=auto 옵션을 추가하면 검색된 키워드가 컬러로 강조됩니다.
docker logs container\_dev 2>&1 | grep --color=auto exception - 다양한 검색 조건: grep의 정규식을 활용하면 더 복잡한 조건으로 로그를 검색할 수 있습니다.
docker logs container\_dev 2>&1 | grep -E "exception|error|fail" - awk나 sed 사용: grep보다 복잡한 패턴 처리나 가공이 필요할 경우 awk나 sed와 조합할 수도 있습니다.
docker logs container\_dev 2>&1 | awk '/exception/ {print $0}'
반응형
'개발 (Development) > Docker' 카테고리의 다른 글
| [Docker] Docker 환경에서 yarn 설치 시 인증서 오류 해결 (0) | 2025.06.01 |
|---|---|
| [Docker] on-premise 환경에서 Docker Compose의 Build 문제 해결 (0) | 2025.06.01 |
| [Docker] Alpine 이미지 SSL 인증 오류 해결 (certificate verify failed) (0) | 2025.06.01 |
| [Docker] Docker 컨테이너 생성과 삭제 이력 추적하는 방법 (0) | 2025.04.26 |
| [Docker] Dockerfile에서 chown이 동작하지 않을 때, 의외의 원인과 해결법 (0) | 2025.04.19 |