Docker – 无法在容器中启动mongodb – 不允许操作

我正在运行docker在Windows上,我试图将我的磁盘上的数据库添加到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 

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

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

主要答案:Docker机器

如果您在Windows上运行Docker(2015年),那么您必须使用Docker Machine运行它。 这是因为Docker尚未在Windows上本地运行; 相反,它使用VirtualBox中的虚拟计算机和docker运行在此。

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

而这个vfs文件系统的问题在于它没有MongoDB需要的所有function, 请参阅有关MongoDB平台的文档特定注意事项 :

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

所以,当你试图在Windows上的Docker容器中运行MongoDB时,使用卷映射到共享的Windows文件夹,它将无法工作,因为VirtualBox的中间文件系统不能支持MongoDB文件系统命令。

附录:Windows 10上的本地Docker

从Windows 10开始,有一个新的选项可以在Windows上原生地运行Docker,而无需使用Docker Machine或VirtualBox。 但是,文件系统又出现了问题。 它使用通过smb共享的ntfs,它再次不支持 MongoDB需要的所有文件操作 ,并导致类似的操作不支持错误 。