Docker Compose에서 볼륨 마운트를 하고 있는데 데이터가 자꾸 사라집니다.
# docker-compose.yml
services:
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: mypassword
volumes:
- ./data:/var/lib/postgresql/data
app:
build: .
volumes:
- .:/app
- /app/node_modules
db 서비스를 docker compose down 후 다시 up 하면 데이터가 사라지는 경우가 있습니다. 그리고 app 서비스에서 /app/node_modules를 왜 별도로 마운트하는지 이해가 안 됩니다.
댓글 4
두 가지 질문 모두 답변드릴게요.
1. 데이터 사라지는 문제
docker compose down은 컨테이너만 삭제하므로 바인드 마운트(./data) 데이터는 유지됩니다. 하지만docker compose down -v를 사용하면 볼륨까지 삭제됩니다!더 안전한 방법은 named volume을 사용하는 것입니다:
2. /app/node_modules 별도 마운트 이유
.:/app이 호스트의 모든 파일을 컨테이너에 마운트합니다. 이때 호스트의 node_modules(또는 없는 경우)가 컨테이너의 것을 덮어씁니다. 익명 볼륨으로 분리하면 컨테이너 빌드 시 설치된 node_modules가 유지됩니다.간단히 정리하면:
./data:/container/path): 소스 코드처럼 호스트에서 직접 편집해야 하는 경우pgdata:/container/path): DB 데이터처럼 Docker가 관리하는 영구 데이터/container/path): node_modules처럼 컨테이너 내부에서만 사용하는 데이터DB 데이터는 반드시 named volume을 권장합니다!