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イメージは機能します!
しかし、データ量を設定するとき、そうではありません...誰が私を助けることができますか?
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 mongodbdata
( docker volume inspect
を参照)はそのパスを提供します(必要に応じてバックアップできます)
Docker Compose経由:
version: '2'
services:
mongodb:
image: mongo:latest
volumes:
- ./<your-local-path>:/data/db
/data/db
は、コンテナに保存されたデータの場所です。
<your-local-path>
は、実際のデータベースジャーナルファイルが保存されるホストマシンであるマシン上の場所です。
2017年夏現在、ローカルボリュームはベストプラクティスとは見なされていません。
ボリュームは、Dockerコンテナーによって生成され、使用されるデータを永続化するための推奨メカニズムです。
docker volume create mongodbdata
docker run -p 27017:27017 -v mongodbdata:/data/db mongo