【问题标题】:Mongo db persistence in docker with volumes带有卷的docker中的mongo db持久性
【发布时间】:2018-09-12 20:13:03
【问题描述】:

我正在尝试创建一个 mongo 数据库容器,但无法使数据持久化。 这是我的 docker-compose.yml

version: "3.2"
services:
  mongodb:
  image: mongo:2.4
  command: --smallfiles 
  ports:
    - 27017:27017
  volumes:
    - type: volume
      source: mongodb_data_volume
      target: /data
volumes:
  mongodb_data_volume:
    external: true

在 docker-compose 和 exec -it 进入 mongodb 之后,我创建了一个新的空数据库,然后列出了挂载卷的内容:

root@cf8330019f91:/data/db# ls
_tmp     admin.1   journal  local.ns
admin.0  admin.ns  local.0  mongod.lock

但是我做了一个上下循环,相同的安装卷被重置为初始值。

root@d18bda47d0b3:/data/db# ls
_tmp  journal  local.0  local.ns  mongod.lock

我试图只停止容器而不是组合起来,然后数据仍然存在......这表明我仍在使用内部存储。如果是这种情况,我该如何让它使用外部卷?

我使用的是 mac 和 docker 版本 18.06.1-ce-mac73。

【问题讨论】:

  • 您是否在 docker compose 之外创建了 mongodb_data_volume?如果外部标志设置为 true,则文档状态 docker compose 不会尝试创建卷:docs.docker.com/compose/compose-file/#external
  • 是的,该卷是之前创建的

标签: mongodb docker docker-compose


【解决方案1】:

我在本地系统中复制了相同的问题并尝试解决它,我已根据文档将 docker-compose 卷中的目标路径从“target:/data”修改为“target:/data/db”在https://hub.docker.com/_/mongo/ 中给出并且它有效。使用更新的 docker-compose 文件,如下所示

    version: "3.2"
    services:
      mongodb:
      image: mongo:2.4
      command: --smallfiles 
      ports:
        - 27017:27017
      volumes:
        - type: volume
          source: mongodb_data_volume
          target: /data/db
    volumes:
      mongodb_data_volume:
        external: true

经过测试并且有效!!!

【讨论】:

  • 谢谢!我想如果我也想要配置,那么我应该添加一个映射到配置文件夹的新卷......无论如何,好地方!
  • 我有一个问题:之间的最佳解决方案是什么:volumes:-type:volume source:mongodb_data_volume target:/data/db -VS -volumes:-"local-dir:docker-dir "
【解决方案2】:

我已经创建了一个 mongodb 容器,它使用以下docker-compose.yml 文件精简到基本的持久存储。 我使用的是官方的mongo镜像版本,并将/data/db下容器中存储的数据库数据映射到本地文件夹/data,如下:

version: "3.2"

services:
    mongodb:
        image: mongo:4.2.2-bionic
        container_name: mongodb
        restart: unless-stopped
        ports:
            - 27017-27019:27017-27019
        volumes:
            - ./data:/data/db

【讨论】:

  • 当我尝试这个时,我得到***aborting after fassert() failureexited with code 14。但是,在我的本地/data中创建了一堆文件和一个journal目录
  • @r_zelazny 你忘了./data 中的点了吗?或者该文件夹是否已经存在用于其他目的?还是您使用的是 Windows?我刚刚在 Ubuntu 18.04 机器上尝试了这个 docker-compose.yml 文件,它对我有用,没有你描述的错误。
  • 编辑我的原始评论为时已晚,但它在 Windows 10 Pro 上也适用于我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-13
  • 2016-03-14
  • 2019-08-12
  • 2018-04-19
  • 2021-12-28
相关资源
最近更新 更多