【问题标题】:Can't mount mongodb directory volume with docker-compose无法使用 docker-compose 挂载 mongodb 目录卷
【发布时间】: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 是的,数据在本地,我已经用mongo shell 进行了检查。 @Fares 我正在运行 OSX Yosemite
  • 你应该去/path/pokemondb 然后运行命令:ls -ls 以显示该文件夹中的文件

标签: node.js mongodb docker-compose


【解决方案1】:

如果您使用的是 Docker Toolbox for OSX,那么虚拟机只能使用主目录。如果您在主目录之外,则需要向 Virtualbox VM 添加另一个共享卷,或者将项目移动到主目录下。

【讨论】:

  • 你是说只有主目录之外的文件,而不是目录可以挂载到 docker 卷上?
  • 对不起,我是说主目录之外的任何东西都不能挂载,因为运行 docker 的虚拟机看不到这些文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-10
  • 1970-01-01
相关资源
最近更新 更多