无法使用docker-compose挂载mongodb目录卷

时间:2016-07-04 03:36:39

标签: node.js mongodb docker-compose

在我的主项目目录中,我有另一个本地目录,我存储我的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并使用/data/db shell检查mongo目录来确认数据没有正确传递,实际上没有任何内容。我做错了什么,为什么我的mongodb数据目录没有正确安装音量?

编辑:我发现了一个意想不到的解决方案。我的一个问题是我对Docker卷的基本误解。我以前认为docker卷是为了在启动时将数据从本地机器复制到docker容器中。但事实上,docker卷用于保存docker容器中生成的本地计算机上的数据。我上面提到的原始问题的解决方案是创建一个dockerfile,将数据复制到映像中,然后在容器启动时将数据导入数据库。我的最终docker撰写文件看起来像这样。

app:
  build: .
  ports:
    - 3000:3000
  links:
    - mongodb

mongodb:
  image: mongo:3.2.4
  ports:
    - 27017:27017

stats:
  build: ./stats
  links:
    - mongodb

1 个答案:

答案 0 :(得分:0)

如果您正在使用Docker Toolbox for OSX,那么只有主目录可供VM使用。如果您不在主目录之外,则需要将另一个共享卷添加到Virtualbox VM,或者将项目移动到您的主目录下。