web-dev-qa-db-ja.com

Docker Mongoデータボリュームの設定方法

Dockerizing MongoDBを使用して、データをローカルボリュームに保存します。

しかし..失敗しました...

Mongo:latestイメージがあります

kerydeMacBook-Pro:~ hu$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
mongo               latest              b11eedbc330f        2 weeks ago         317.4 MB
ubuntu              latest              6cc0fc2a5ee3        3 weeks ago         187.9 MB

〜/ dataにモノデータを保存したい。そう - -

kerydeMacBook-Pro:~ hu$ docker run -p 27017:27017 -v ~/data:/data/db --name mongo -d mongo
f570073fa3104a54a54f39dbbd900a7c9f74938e2e0f3f731ec8a3140a418c43

しかし...それは機能しません...

docker ps-デーモンmongoはありません

kerydeMacBook-Pro:~ hu$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

「mongo」を実行してみてください--failed

kerydeMacBook-Pro:~ hu$ docker exec -it f57 bash
Error response from daemon: Container f57 is not running

ドッカーインスペクションmongo

kerydeMacBook-Pro:~ hu$ docker inspect mongo
[
{
    "Id": "f570073fa3104a54a54f39dbbd900a7c9f74938e2e0f3f731ec8a3140a418c43",
    "Created": "2016-02-15T02:19:01.617824401Z",
    "Path": "/entrypoint.sh",
    "Args": [
        "mongod"
    ],
    "State": {
        "Status": "exited",
        "Running": false,
        "Paused": false,
        "Restarting": false,
        "OOMKilled": false,
        "Dead": false,
        "Pid": 0,
        "ExitCode": 100,
        "Error": "",
        "StartedAt": "2016-02-15T02:19:01.74102535Z",
        "FinishedAt": "2016-02-15T02:19:01.806376434Z"
    },




"Mounts": [
        {
            "Source": "/Users/hushuming/data",
            "Destination": "/data/db",
            "Mode": "",
            "RW": true
        },
        {
            "Name": "365e687c4e42a510878179962bea3c7699b020c575812c6af5a1718eeaf7b57a",
            "Source": "/mnt/sda1/var/lib/docker/volumes/365e687c4e42a510878179962bea3c7699b020c575812c6af5a1718eeaf7b57a/_data",
            "Destination": "/data/configdb",
            "Driver": "local",
            "Mode": "",
            "RW": true
        }
    ],

データボリュームを設定しない場合、mongoイメージは機能します!

しかし、データ量を設定するとき、そうではありません...誰が私を助けることができますか?

33
Kery Hu

docker logs を試して、コンテナが停止したときに何が起こっていたかを確認し、「Existed」モードにします。

ボリュームのフルパスを指定すると役立つ場合も参照してください。

docker run -p 27017:27017 -v /home/<user>/data:/data/db  ...

OPは以下を追加します。

docker logs mongo 
exception in initAndListen: 98 
Unable to create/open lock file: /data/db/mongod.lock 
errno:13 Permission denied 
Is a mongod instance already running?
terminating 2016-02-15T06:19:17.638+0000 
I CONTROL [initandlisten] dbexit: rc: 100 

Errno:13は issue の意味です。

このコメント 追加:

VBでboot2dockerを使用するか、VBでVagrant Boxを使用するファイル所有権/許可の問題です(このdockerイメージとは関係ありません)。

それでも、私はなんとか所有権をハックし、boot2docker内の/ Users共有ボリュームをuid 999とgid 999(mongo docker imageが使用するもの)に再マウントしました開始しました:

$ boot2docker ssh
$ Sudo umount /Users
$ Sudo mount -t vboxsf -o uid=999,gid=999 Users /Users

しかし...ファイルシステムのタイプがサポートされていないためにmongodがクラッシュします(vboxsfでmmapが動作しません)

実際の解決策は、DVC:Data Volume Containerを試すことです。なぜなら、今は mongodb doc 言及:

MongoDBには、ディレクトリでfsync()をサポートするファイルシステムが必要です。
たとえば、HGFSとVirtual Boxの共有フォルダーはこの操作をサポートしていません。

そう:

oSXへのマウントは、virtualbox共有フォルダーが機能するため、MongoDBでは機能しません。


DVC(データボリュームコンテナ)の場合、 docker volume create を試してください。

docker volume create mongodbdata

その後、次のように使用します。

docker run -p 27017:27017 -v mongodbdata:/data/db  ...    

そして、それがうまく機能するかどうかを確認します。

私が言及したように コメント内

docker volume inspect mongodbdatadocker volume inspect を参照)はそのパスを提供します(必要に応じてバックアップできます)

34
VonC

Docker Compose経由:

version: '2'
    services:
      mongodb:
        image: mongo:latest
        volumes:
          - ./<your-local-path>:/data/db

/data/dbは、コンテナに保存されたデータの場所です。

<your-local-path>は、実際のデータベースジャーナルファイルが保存されるホストマシンであるマシン上の場所です。

24
Richard

2017年夏現在、ローカルボリュームはベストプラクティスとは見なされていません。

Docker Docs

ボリュームは、Dockerコンテナーによって生成され、使用されるデータを永続化するための推奨メカニズムです。

docker volume create mongodbdata
docker run -p 27017:27017 -v mongodbdata:/data/db mongo
18
Joshua Cook