Docker - 无法在容器中挂载启动mongodb - 不允许操作

时间:2015-08-17 14:32:48

标签: mongodb docker boot2docker dockerfile dockerhub

我正在Windows上运行docker,我正在尝试将磁盘上的数据库添加到mongodb容器中。

数据库存储在C:\ Users \ data \ db。

我运行命令:

$ docker run --name mongodb -p 27017:27017 -v //c/Users/data/db:/data/db devops-mongodb

但后来我收到了这个错误:

2015-08-17T14:28:10.385+0000 [initandlisten] exception in initAndListen: 10309 U
nable to create/open lock file: /data/db/mongod.lock errno:1 Operation not permi
tted Is a mongod instance already running?, terminating

我相信我已经在Dockerfile中正确设置了权限,如下所示:

RUN mkdir -p /data/db && chown -R `id -u` /data/db

VOLUME /data/db

2 个答案:

答案 0 :(得分:0)

尝试添加-d标记并查看是否有效,如下所示:

docker run -d --name mongodb -p 27017:27017 -v //c/Users/data/db:/data/db devops-mongodb

答案 1 :(得分:0)

主要答案:Docker Machine

如果你在Windows上运行Docker(2015年),那么你必须使用Docker Machine运行它。这是因为Docker还没有在Windows上本机运行;相反,它使用VirtualBox中的虚拟计算机,并在此处运行docker。

现在关键是与Docker共享的主机(Windows)文件夹是通过这个VirtualBox机器完成的,这意味着他们使用virtual file system vfs - 而不是通常理解的ntfs或xfs或任何文件系统。

这个vfs文件系统的问题在于它没有MongoDB所需的所有功能;请参阅MongoDB Platform Specific Considerations上的文档:

  

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

因此,当您尝试在Windows上的docker容器中运行MongoDB时,使用卷映射到共享的Windows文件夹,它将无法工作,因为VirtualBox的中间文件系统无法支持MongoDB文件系统命令。 / p>

附录:Windows 10上的原生Docker

从Windows 10开始,有一个新选项可以在不使用Docker Machine或VirtualBox的情况下本地运行Docker on Windows。但是,文件系统再次出现问题;它使用在smb上共享的ntfs,它再次是MongoDB所需的does not support all the file operations,并导致类似的Operation Not Supported errors