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需要的所有文件操作 ,并导致类似的操作不支持错误 。