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 이 세 가지를 항상 구분해서 관리하는 것이 중요합니다.
이번 문제를 통해 실무에서도 프로젝트 구조를 명확히 나누는 습관을 들이는 계기가 되었습니다.