如何设置docker mongo数据量

我想要使​​用Dockerizing MongoDB并将数据存储在本地卷中。

但是..失败了…

它有mongo:最新的图像

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” – 失败

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

docker检查孟戈

 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日志,以查看容器停止并进入“Existed”模式时发生了什么。

另请参阅指定卷的完整path将有助于:

 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 

一个错误:13是第30个问题 。

这个评论增加了:

这是一个文件所有权/许可问题(不涉及这个docker的形象),无论是使用VB的boot2docker或与VB的stream浪盒。

不过,我设法破解了所有权, 将boot2docker中的/ Users共享卷重新安装到了999和gid 999(这是mongo docker镜像使用的),并启动它:

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

但是…由于不支持文件系统types,mongod崩溃(mmap不能在vboxsf上工作)

所以实际的解决scheme是尝试DVC:Data Volume Container ,因为现在mongodb文档提到:

MongoDB需要在目录上支持fsync()的文件系统。
例如,HGFS和Virtual Box的共享文件夹不支持此操作。

所以:

由于virtualbox共享文件夹的工作方式,挂载到OSX不适用于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 )将为您提供path(如果需要,您可以进行备份)

截至2017年夏季,本地卷不被视为最佳做法。

每个Docker文档 :

如果您想要在容器之间共享某些持久性数据,或者想要使用非持久性容器,则最好创build一个名为“数据容量容器”,然后从中装入数据。

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

通过Docker撰写:

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

/data/db是保存在容器上的数据的位置。

<your-local-path>是您的机器上的位置AKA将保存实际数据库日志文件的主机。