Docker 컨테이너가 나만 죽는 이유와 해결방안

류지수·2025년 8월 13일
0

상황

  • Docker로 여러 컨테이너를 띄워놨는데, Redis 컨테이너가 자주 꺼짐
  • 다른 팀원들은 잘 동작하지만, 나만 꺼지는 상황

docker inspect 결과:

OOMKilled=true (exit=137)

→ 메모리 부족(OOM Kill) 이 원인.

확인 방법

docker inspect redis-container --format '{{.State.OOMKilled}} (exit={{.State.ExitCode}})'

*redis-container는 docker에 있는 이름을 확인하세요.


원인 분석

  1. Docker Desktop 메모리 설정 차이
  • 팀원: Docker Desktop → Settings → Resources → Memory 값이 4GB 이상.
  • 나: 기본값(2GB)으로 설정 → Redis가 순간적으로 fork 시 메모리를 더 쓰면 바로 종료.
  1. 로컬 메모리 여유 부족
  • 나만 다른 컨테이너, VSCode, Chrome, DB 등 메모리 많이 쓰는 프로그램을 동시에 실행.
  • Docker VM에서 사용 가능한 메모리가 적어서 Redis가 죽음
  1. Redis 데이터 사용량 차이
  • 내 환경에서만 TTL 없는 키가 쌓여서 메모리 사용량이 훨씬 많음.
  • 확인 방법:
docker exec -it redis-container redis-cli dbsize
docker exec -it redis-container redis-cli info memory | egrep 'used_memory_human|maxmemory'
  • 팀원과 비교했을 때 dbsize가 월등히 크면 데이터 누적이 원인.
  1. 환경 차이
  • Docker Desktop 버전, Compose 버전, OS 차이로 기본 메모리 제한값이 다를 수 있음.
  • docker info로 Total Memory 확인 가능.

해결 방법

  1. Docker Desktop 메모리 늘리기
    1) Settings Settings → Resources → Memory에서 팀원과 동일하게 맞춤(권장 4GB 이상).
    2) Apply & Restart.

  2. Redis 메모리 제한 설정
    docker-compose.yml 예시

services:
  redis:
    image: redis:7.2
    command:
      - redis-server
      - --maxmemory
      - 256mb
      - --maxmemory-policy
      - allkeys-lru
      - --appendonly
      - "no"
      - --daemonize
      - "no"
    ports:
      - "6379:6379"
    mem_limit: 512m
    restart: unless-stopped
  • maxmemory: 컨테이너 메모리 제한보다 낮게(50~70%).
  • maxmemory-policy: allkeys-lru로 오래된 키부터 제거.
  • appendonly no: AOF 끄면 메모리·디스크 부담 줄어듦.
  1. 불필요한 데이터 정리
  • TTL 없는 키가 많으면, 저장 시점마다 메모리 급상승.
  • 개발용이라면 주기적으로 FLUSHALL 하거나 TTL 설정.

내가 찾은 원인과 해결한 방법

나의 원인은 1번 (Docker Desktop 메모리 설정) 때문이었고,
Docker Desktop → Settings → Resources → Memory Limit 값을 늘리자, Redis 컨테이너가 더 이상 종료되지 않았다.

profile
끄적끄적

0개의 댓글