具有卷的Docker中的Mongo DB持久性

时间:2018-09-12 20:13:03

标签: mongodb docker docker-compose

我正在尝试创建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。

2 个答案:

答案 0 :(得分:6)

我已在本地系统中复制了相同的问题,并尝试解决该问题,根据文档,我已将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

经过测试,可以正常工作!

答案 1 :(得分:-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