【发布时间】:2016-07-04 03:36:38
【问题描述】:
在我的主项目目录中,我有另一个本地目录,用于存储我的 mongodb 数据,它是 ./pokemondb。我知道这个目录充满了我的数据,因为我运行了mongoimport --db stats --colletion pokemon --file stats.json 并且可以确认数据在mongo shell 中。我也有一个看起来像这样的 docker-compose 文件
pokemon-app:
build: .
ports:
- "3000:3000"
links:
- mongo
mongo:
image: mongo:3.2.4
ports:
- "27017:27017"
volumes:
- "./pokemondb:/data/db"
我运行docker-compose up 并且没有发生错误。但问题是 mongodb 目录/data/db 现在不包含我试图传递的挂载卷。我可以通过执行docker exec -ti [mongo container id] bash 并使用mongo shell 检查/data/db 目录来确认数据没有正确传递,实际上什么都没有。我做错了什么,为什么我的 mongodb 数据目录没有正确挂载卷?
编辑:我为我的问题找到了一个意想不到的解决方案。我的一个问题是我对 docker 卷是什么存在根本性的误解。我以前认为 docker 卷是为了在启动时将数据从本地计算机复制到 docker 容器中。但实际上 docker 卷是为了将数据保存在 docker 容器中生成的本地机器上。我上面提出的原始问题的解决方案是创建一个 dockerfile 将数据复制到图像中,然后在容器启动时将数据导入数据库。我最终的 docker compose 文件如下所示。
app:
build: .
ports:
- 3000:3000
links:
- mongodb
mongodb:
image: mongo:3.2.4
ports:
- 27017:27017
stats:
build: ./stats
links:
- mongodb
【问题讨论】:
-
您是否检查了
./pokemondb文件夹中的现有文件?您只需使用 mongo shell 确认存在的数据。 -
你用的是什么操作系统?您的系统中是否运行着 SELinux 之类的东西?
-
@ThanhNguyenVan 是的,数据在本地,我已经用
mongoshell 进行了检查。 @Fares 我正在运行 OSX Yosemite -
你应该去
/path/pokemondb然后运行命令:ls -ls以显示该文件夹中的文件
标签: node.js mongodb docker-compose