2017-01-24 14 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)、データは2日前の状態に戻りました。削除さえ消えた。

昨日すべてのコレクションをクリーンアップし、実際のデータで埋め尽くして、最近削除したすべてのテストデータが含まれています。

私の質問は次のとおりです: 1)どのようにmongodbのデータをこのような災害から保護するのですか? 2)誰かがこれらの結果につながる正確な条件を教えてもらえますか? 3)データを復元するにはどうすればよいですか?

EDIT:いくつかの調査の後、私はそれがドッカーの作成失敗であったと思う。 しかし、質問はまだ有効です:)

+0

"マップされたボリューム"という言葉を詳しく説明できますか?どのくらい正確にこのボリュームを作成/添付しましたか? Dockerでボリュームを実行するにはさまざまな方法があり、それぞれ異なる動作/制限/リスクがあります。 –

+0

は私がドッキングウィンドウ-コンを使用: ボリューム: - 〜/データ/ DB:/データ/ DB –

+0

本当に私たちには何も教えてくれない、質問を編集して、ボリュームがマッピングされたか、どのように作成されたかについてのより詳細な情報を提供してください。 –

答えて

2

あなたの作成ファイルを見て、あなたは相対~/data/dbとしてソースディレクトリを参照しています。その構成ファイルにアクセスできる複数のユーザーアカウント(ルートと名前付きユーザーアカウント)がある場合、"~/data/db"ディレクトリは、を実行してコンテナを起動するユーザーによって異なります。おそらくあなたの環境でそれが起こったようなものでしょう。

このタイプの問題の可能性を避けるために、ユーザーまたは親ディレクトリのコンテキストに基づいて変更できるものではなく、ホストボリューム(つまり/opt/data/db:/data/db)への絶対パスを使用する方がよいでしょう。

データボリュームとして標準のホストディレクトリを使用しても、自発的にデータをロールバックしてはなりません。上記のディレクトリコンテキストに問題がなければ、誰かがファイルシステムのスナップショットを元に戻したり、バックアップを復元したり、DBを直接変更したりするような要素があった可能性があります。

+0

ありがとう!あなたが正しい! これは、ユーザーに依存するパスの私のせいです... 私は魔法を信じ始めました。 –

+0

素晴らしいです。あなたがそれを整理してうれしい! – Jon

関連する問題