2017-01-24 2 views
3

오늘 슬픈 이야기가 있습니다. 토요일 이후 데이터베이스 변경 사항이 모두 손실되었습니다.도커 데이터 안전

우리는 mongodb (3.4.1)을 사용하며,이 특별한 경우 매핑 된 볼륨을 가진 공식 도커 컨테이너 안에서 실행 중입니다. 컨테이너는 고정 표시기-작성하여 만든

, docker-compose.yml은 다음과 같습니다

version: "2" 
services: 
     database: 
      image: mongo:3.4.1 
      restart: always 
      container_name: cvs-db 
      volumes: 
       - ~/data/db:/data/db 
      ports: 
       - "27017:27017" 

~/data/db 그냥 오래 전에 만든 일반 폴더입니다.

컨테이너를 다시 시작한 후 (데이터가 docker-compose up -d) 이틀 전에 데이터가 반환되었습니다. 삭제조차도 사라졌습니다.

어제 모든 컬렉션을 정리하고 실제 데이터로 채우기 시작했으며 이제는 최근에 제거한 모든 테스트 데이터가 포함되었습니다.

내 질문은 : 1) mongodb 데이터를 어떻게 그러한 재해로부터 보호 할 수 있습니까? 2) 누군가 이러한 결과를 초래할 수있는 정확한 조건을 말할 수 있습니까? 3) 데이터를 어떻게 복원합니까?

편집 : 일부 연구를 마친 후에는 도커 작성 오류라고 생각합니다. 하지만 질문은 여전히 ​​유효합니다.

+0

"매핑 된 볼륨"이란 용어에 대해 자세히 설명해 주시겠습니까? 이 볼륨을 얼마나 정확하게 만들거나 첨부 했습니까? Docker에서 볼륨을 수행하는 방법에는 여러 가지가 있으며 각각 다른 동작/제한/위험이 있습니다. –

+0

docker-compose를 사용했습니다 : 볼륨 : ~/data/db :/data/db –

+0

실제로 우리에게 아무 것도 알려주지 않습니다. 질문을 편집하고 볼륨이 매핑되거나 생성 된 방법에 대해 자세히 설명하십시오. –

답변

2

작성 파일을 보면 소스 dir을 상대 ~/data/db으로 참조하고 있습니다. 해당 구성 파일에 액세스 할 수있는 사용자 계정이 두 개 이상인 경우 (예 : 루트와 명명 된 사용자 계정) "~/data/db" 디렉토리는을 작성하여 실행하는 사용자에 따라 과 다를 수 있습니다. 아마도 그런 일이 당신의 환경에서 일어 났을 것입니다.

이러한 유형의 문제가 발생하지 않도록 사용자 또는 상위 디렉토리 컨텍스트에 따라 변경할 수있는 것이 아니라 호스트 볼륨 (예 : /opt/data/db:/data/db)의 절대 경로를 사용하는 것이 좋습니다.

표준 호스트 디렉토리를 데이터 볼륨으로 사용하면 자발적으로 데이터를 롤백해서는 안됩니다. 위에서 언급 한 디렉토리 컨텍스트와 관련된 문제가 아니라면 누군가가 파일 시스템 스냅 샷을 되돌 리거나 백업을 복원하거나 직접 DB를 변경하는 것과 같은 다른 요인이있을 수 있습니다.

+0

오 고마워요! 네가 옳아! 사용자 별 경로가 내 잘못입니다 ... 나는 거의 마법을 믿기 시작했습니다 ... –

+0

좋아요. 다행히 분류 해 줘서 다행이야! – Jon