我尝试在我的 Windows 计算机上运行docker-compose
来启动 MongoDB 实例和仅数据容器,它代理包含数据库文件的附加卷。
mongodata:
image: mongo:2.6.8
volumes:
- ./data/db:/data/db
command: --break-mongo
mongo:
image: mongo:2.6.8
volumes_from:
- mongodata
ports:
- "27017:27017"
command: --smallfiles --rest
* P.S。 --break-mongo命令是有目的的,因为它只需要创建卷
据我了解,使用data-only
卷模式会处理权限问题,但我可以在Mongo容器启动期间看到以下错误:
[0m2016-01-26T00:23:52.340+0000 [initandlisten] info preallocateIsFaster couldn't run due to: couldn't open file /data/db/journal/tempLatencyTest for writing errno:1 Operation not permitted; returning false
[0m2016-01-26T00:23:52.341+0000 [initandlisten] Unable to remove temporary file due to: boost::filesystem::remove: Text file busy: "/data/db/journal/tempLatencyTest"
[0m2016-01-26T00:23:52.344+0000 [initandlisten] exception in initAndListen: 13516 couldn't open file /data/db/journal/j._0 for writing errno:1 Operation not permitted, terminating
因此,我无法将MongoDb与我本地计算机上的附加卷一起使用。有没有解决这个问题的方法?
答案 0 :(得分:1)
如果您在Mac或Windows上使用Docker Machine,则使用Docker守护程序 只能有限地访问您的OS X或Windows文件系统。搬运工人 机器尝试自动共享您的/用户(OS X)或C:\ Users(Windows) 目录。因此,您可以使用。
在OS X上挂载文件或目录
docker run -v /Users/<path>:/<container path> ...
在Windows上,使用以下命令安装目录:
docker run -v /c/Users/<path>:/<container path> ...
所有其他路径都来自虚拟机的文件系统。例如,如果你是 使用VirtualBox可以分享其他一些文件夹,你需要 做额外的工作。 在VirtualBox的情况下,您需要制作 主机文件夹可用作VirtualBox中的共享文件夹。然后你可以 使用Docker -v标志挂载它。
基本上,如果您尝试从C:\Users
文件夹开始提供完整路径,如上所示,或者如果您不能这样做,请将主机文件夹设置为Virtualbox中的共享文件夹。
<强>更新强>
无需提供完整的路径。 docker-compose
会处理这个问题。您必须确保docker-compose.yml
文件夹内的Users
位于内部(某处)。它不能在某个根文件夹中。如果您已经这样做了,那么您将不得不调整您的权限。只需为该文件夹授予完全权限。
答案 1 :(得分:0)
更新:查看latest Docker for Windows and MacOS X。
更快更可靠:不再有VirtualBox! Docker引擎是 在xhyve Virtual上运行Alpine Linux发行版 适用于Mac OS X或Windows上的Hyper-V VM,以及该VM 由Docker应用程序管理。你不需要docker-machine 运行Docker for Mac和Windows。
注意:如果是Windows,则需要Windows 10 Pro才能使其正常工作,因为Hyper-V未包含在其他版本中。
对于以前的Docker Toolbox,由于VirtualBox,似乎在Windows和OS X上根本没有解决方案。图像文档确实states:
警告(Windows和OS X):Windows和OS X上的默认Docker设置 使用VirtualBox VM来托管Docker守护程序。不幸的是, VirtualBox用于在主机系统和。之间共享文件夹的机制 Docker容器与内存映射文件不兼容 由MongoDB使用(请参阅vbox bug,docs.mongodb.org及相关内容 jira.mongodb.org bug)。这意味着无法运行 MongoDB容器,数据目录映射到主机
答案 2 :(得分:0)
作为一种解决方法,我只是在mongo deamon启动之前从文件夹中复制。另外,在我的情况下,我不关心日志文件,所以我只复制数据库文件。
我在docker-compose.yml上使用过这个命令
command: bash -c "(rm /data/db/*.lock && cd /prev && cp *.* /data/db) && mongod"
每次在停止我使用的容器之前:
docker exec <container_name> bash -c 'cd /data/db && cp $(ls *.* | grep -v *.lock) /prev'
注意:/ prev设置为音量。 path/to/your/prev:/prev
另一种解决方法是使用mongodump和mongorestore。
command: bash -c "(sleep 30; mongorestore
--quiet) & mongod"
docker exec <container_name> mongodump
注意:我使用sleep是因为我想确保mongo启动,并且需要一段时间。
我知道这涉及到手工作业等,但我很高兴至少我在我的Windows 10机器上运行了现有数据的mongo,并且在我想要的时候仍可以使用我的Macbook。
(croscopy https://stackoverflow.com/a/42044756/1894856)