글 목록으로 돌아가기
최오키 개발블로그 3분 읽기

Docker 컨테이너 종료 코드 137의 원인과 해결 방법

Docker에서 컨테이너가 종료될 때 발생하는 코드 137의 원인과 해결 방법을 알아보세요.


증상 및 오류 메시지

Docker에서 컨테이너가 종료될 때, 특정 종료 코드가 반환됩니다. 그 중에서도 종료 코드 137은 컨테이너가 강제로 종료되었음을 나타냅니다. 이는 일반적으로 시스템에서 메모리 부족으로 인해 발생하는 OOM(Out Of Memory) 상황에서 발생합니다. 이 오류는 다음과 같은 메시지로 확인할 수 있습니다:

Error: Container exited with code 137

이 메시지는 컨테이너가 비정상적으로 종료되었음을 나타내며, 이 경우에는 메모리 문제를 의심해볼 수 있습니다.

원인

종료 코드 137의 주된 원인은 메모리 부족입니다. Docker 컨테이너가 실행되는 동안 사용 가능한 메모리를 초과하게 되면, Linux 커널은 OOM Killer를 호출하여 프로세스를 종료합니다. 이로 인해 컨테이너가 강제로 종료되며, 종료 코드 137이 반환됩니다. 이 외에도 다음과 같은 원인이 있을 수 있습니다:

  • 컨테이너에 할당된 메모리가 부족한 경우
  • 다른 프로세스가 시스템 리소스를 과도하게 사용하고 있는 경우

프로필사진

이미지 출처: https://doinitright.tistory.com/112

확인 명령어

컨테이너의 메모리 사용량을 확인하기 위해 다음 명령어를 사용할 수 있습니다:

docker stats

이 명령어는 현재 실행 중인 모든 컨테이너의 메모리 사용량과 CPU 사용량을 보여줍니다. 이를 통해 특정 컨테이너가 과도한 메모리를 사용하고 있는지 확인할 수 있습니다.

해결 절차

  1. 메모리 사용량 확인: 위의 docker stats 명령어를 통해 메모리 사용량을 확인합니다. 필요 시, 다른 컨테이너나 프로세스를 종료하여 메모리를 확보합니다.

  2. 컨테이너 메모리 제한 조정: 컨테이너를 실행할 때 메모리 제한을 설정할 수 있습니다. 예를 들어, 다음과 같이 명령어를 수정하여 메모리를 4GB로 설정할 수 있습니다:

docker run -m 4g your-image
  1. 서버 메모리 증설: 만약 서버의 메모리가 부족하다면, 서버의 메모리를 증설하는 것이 가장 효과적인 방법입니다. 2GB의 메모리로는 많은 애플리케이션을 안정적으로 실행하기 어려울 수 있습니다.

  2. 애플리케이션 최적화: 애플리케이션 코드에서 메모리 사용을 최적화할 수 있는 방법을 찾아보세요. 예를 들어, 불필요한 데이터 로드를 피하거나, 메모리 누수 문제를 해결하는 것이 필요할 수 있습니다.

흔한 실수

  • 메모리 제한을 설정하지 않음: 컨테이너를 실행할 때 메모리 제한을 설정하지 않으면, 기본적으로 시스템에서 사용 가능한 메모리만큼 사용할 수 있습니다. 이로 인해 OOM 상황이 발생할 수 있습니다.
  • 서버 리소스 과다 사용: 여러 컨테이너를 동시에 실행할 때, 각 컨테이너의 메모리 사용량을 고려하지 않고 과도하게 실행하면 OOM 문제가 발생할 수 있습니다.

재발 방지 체크리스트

  • 컨테이너에 적절한 메모리 제한을 설정했는가?
  • 서버의 메모리 용량이 충분한가?
  • 애플리케이션의 메모리 사용을 모니터링하고 최적화했는가?
  • 다른 프로세스가 시스템 리소스를 과도하게 사용하고 있지 않은가?

이러한 점들을 체크하면 Docker 컨테이너에서 종료 코드 137이 발생하는 것을 예방할 수 있습니다. 컨테이너의 안정성을 높이기 위해 항상 메모리 사용량을 모니터링하고, 필요에 따라 리소스를 조정하는 것이 중요합니다.

실무 적용 체크리스트

  • Docker container exited 137 원인과 해결을 적용하기 전에 현재 운영 환경의 기준값과 예외 상황을 먼저 정리합니다.
  • 변경 전후로 확인할 지표를 정하고, 문제가 생겼을 때 되돌릴 수 있는 절차를 문서화합니다.
  • 한 번에 모든 서버나 서비스에 적용하기보다 작은 범위에서 검증한 뒤 점진적으로 확대합니다.
  • 담당자, 확인 시간, 장애 판단 기준을 명확히 남겨 같은 문제가 반복될 때 빠르게 대응할 수 있게 합니다.

도커 프로젝트 빌드 시 error code 137 해결 방법

이미지 출처: https://doinitright.tistory.com/112


참고한 자료

Related posts

ElasticSearch Elasticsearch 클러스터 상태가 Red일 때의 해결 방법 Linux cannot allocate memory 오류의 원인과 해결 방법 Linux Connection Refused 에러: 원인과 해결 방법