我想使用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 inspect 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图像可以工作!
但是,在设置数据量时,它不是...... 谁能帮我 ?
答案 0 :(得分:30)
尝试检查docker logs 以查看容器停止后进入的状态"已存在"模式。
另请参阅指定卷的完整路径是否有帮助:
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是issue 30的意思。
This comment补充道:
它是文件所有权/权限问题(与此docker镜像无关),无论是使用带有VB的boot2docker还是带有VB的流浪盒。
然而,我设法破解了所有权,将boot2docker中的/ Users共享卷重新安装到uid 999和gid 999(这是mongo docker图像使用的)并启动它:
$ boot2docker ssh
$ sudo umount /Users
$ sudo mount -t vboxsf -o uid=999,gid=999 Users /Users
但是...由于文件系统类型不受支持而导致mongod崩溃(mmap无法在vboxsf上运行)
所以实际的解决方案是尝试 DVC: Data Volume Container ,因为现在mongodb doc提到:
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 ...
看看它是否更好。
正如我提到in the comments:
docker volume inspect mongodbdata
(请参阅docker volume inspect
)会为您提供路径(如果需要,您可以备份)
答案 1 :(得分:17)
通过Docker撰写:
version: '2'
services:
mongodb:
image: mongo:latest
volumes:
- ./<your-local-path>:/data/db
/data/db
是保存在容器上的数据的位置。
<your-local-path>
是您计算机上的位置AKA是将保存实际数据库日记文件的主机。
答案 2 :(得分:16)
截至2017年夏季,本地卷不被视为最佳做法。
卷是保存Docker容器生成和使用的数据的首选机制。
docker volume create mongodbdata
docker run -p 27017:27017 -v mongodbdata:/data/db mongo
答案 3 :(得分:1)
对于在Windows上运行MongoDB容器的任何人:如here所述,使用路径将卷从Windows主机装载到MongoDB容器(我们称为local volume
)时会出现问题。
您可以使用Docker volume
(由Docker管理的卷)来解决该问题:
docker volume create mongodata
或使用docker-compose
作为我的偏好:
version: "3.4"
services:
....
db:
image: mongo
volumes:
- mongodata:/data/db
restart: unless-stopped
volumes:
mongodata:
在Windows 10上进行了测试,并且可以正常工作
答案 4 :(得分:0)
找到一个链接:VirtualBox共享文件夹不是 supported by mongodb。