본문 바로가기
TroubleShooting

Docker Compose 컨테이너 덮어쓰기 문제 발생 원인 및 해결 방법

by 창따오 2025. 7. 18.
728x90

Spring Boot MSA 환경에서 Auth-Service와 User-Service 각각 별도의 DB를 관리하면서 docker-compose로 컨테이너를 띄울 때, 컨테이너가 덮어써지는 문제를 경험했습니다.

아래는 문제 상황과 해결 방법을 정리한 트러블슈팅 기록입니다.

 


✅ 문제 상황

  • Auth-Service용 docker-compose.yml 실행 후:
  • docker compose up -d
  • User-Service용 docker-compose.yml 실행했더니: → 기존 auth-db 컨테이너가 덮어써지고 user-db가 생성되지 않음.

✅ 주요 원인 3가지

1️⃣ container_name 중복

  • 두 compose 파일에서 아래처럼 동일한 이름 설정:
container_name: auth-db

2️⃣ volume 이름 중복

  • 두 서비스 모두:
  •  
volumes:
  - data:/var/lib/postgresql/data

3️⃣ compose project name 중복

  • docker-compose는 기본적으로 폴더명 기준으로 project name을 설정.
  • 같은 폴더에서 여러 yaml 실행 시 덮어쓰기 발생 가능.(실제로 Intellij에서 각 project에서 실행 하였으나, Docker-DB로 폴더 이름이 같았고, 이와 같은 이유로 덮어씌워짐)

1️⃣ container_name 다르게 설정

# Auth-Service
container_name: auth-db

# User-Service
container_name: user-db

2️⃣ volume 이름 다르게 설정

volumes:
  auth-data:

volumes:
  user-data:

3️⃣ 프로젝트 이름 명확히 지정

docker-compose 실행 시:

docker compose -f auth-compose.yml -p auth up -d

docker compose -f user-compose.yml -p user up -d

✅ 참고: 폴더 구조 권장

  • /msa/auth-service/docker-compose.yml
  • /msa/user-service/docker-compose.yml

→ 서로 다른 폴더에서 관리하는 것이 가장 안전.

 

 

✅ 마무리

Docker Compose를 여러 서비스에 적용할 때는 container_name, volume 이름, project name 이 세 가지를 항상 구분해서 관리하는 것이 중요합니다.

이번 문제를 통해 실무에서도 프로젝트 구조를 명확히 나누는 습관을 들이는 계기가 되었습니다.