【问题标题】:docker-compose MongoDB replica set data loss after some period of time一段时间后,docker-compose MongoDB 副本集数据丢失
【发布时间】:2021-01-25 08:08:01
【问题描述】:

下面是我用过的docker-compose.yml。

MongoDB 容器已创建,大约 6 到 8 小时后,mongo 内的数据库会自动清除。

即使在手动重启后,我也无法取回我的数据。

我采用了两种方法,但仍然无法弄清楚问题所在。

我是否需要像方法 1 那样在 compose 文件的顶部声明卷,或者像方法 2 那样提供用户特定目录“./data/mongo-1”

添加下面会有帮助吗?

volumes:
  mongo_data:
   driver: local # not working
   external: true # will it work?

方法一:单节点副本集

version: '3.8'

volumes:
  mongo_data:

mongodb:
    hostname: mongodb
    container_name: mongodb
    image: mongo:latest
    environment:
      MONGO_INITDB_DATABASE: moviebooking
      MONGO_REPLICA_SET_NAME: rs0
    volumes:
      - ./mongo-initdb.d:/docker-entrypoint-initdb.d
      - mongo_data:/data/db
    expose:
      - 27017
    ports:
      - "27017:27017"
    restart: unless-stopped
    healthcheck:
      test: test $$(echo "rs.initiate().ok || rs.slaveOk().ok || rs.status().ok" | mongo --quiet) -eq 1
      interval: 10s
      start_period: 30s
    entrypoint: [ "/usr/bin/mongod", "--bind_ip_all", "--replSet", "rs0" ]

方法二:多节点副本集

version: '3.8'

services:

 mongo1:
    image: mongo:4.2
    container_name: mongo1
    command: ["--replSet", "my-replica-set", "--bind_ip_all", "--port", "27017"]
    volumes:
      - ./data/mongo-1:/data/db
    ports:
      - 27017:27017
    healthcheck:
      test: test $$(echo "rs.initiate({_id:'my-replica-set',members:[{_id:0,host:\"mongo1:27017\"},{_id:1,host:\"mongo2:27018\"},{_id:2,host:\"mongo3:27019\"}]}).ok || rs.status().ok" | mongo --port 27017 --quiet) -eq 1
      interval: 10s
      start_period: 30s

  mongo2:
    image: mongo:4.2
    container_name: mongo2
    command: ["--replSet", "my-replica-set", "--bind_ip_all", "--port", "27018"]
    volumes:
      - ./data/mongo-2:/data/db
    ports:
      - 27018:27018

  mongo3:
    image: mongo:4.2
    container_name: mongo3
    command: ["--replSet", "my-replica-set", "--bind_ip_all", "--port", "27019"]
    volumes:
      - ./data/mongo-3:/data/db
    ports:
      - 27019:27019

【问题讨论】:

    标签: mongodb docker docker-compose


    【解决方案1】:

    在我的例子中,db 被某些人入侵了。

    添加卷挂载将起作用,在 compose 中将其设置为外部会要求您在运行 compose 文件之前在外部创建一个卷。我觉得这是一种安全的方法,而不是要求 compose 来决定音量位置。

    不客气:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 2020-03-10
      相关资源
      最近更新 更多