【问题标题】:MopngoDb Single Node Replica Set with docker container带有 docker 容器的 MongoDb 单节点副本集
【发布时间】:2021-10-27 16:32:29
【问题描述】:

我有一个 MongoDb 容器,它使用配置如下代码的单节点副本集。要运行副本集,我需要在 mongoDb shell 上执行另一个命令 rs.initiate() 如何将该命令添加到容器配置命令列表中,这样我就不必在 MongoDb shell 上手动执行该命令?

 mongodb:
    image: mongo:5.0
    container_name: mongodb
    command: ["--replSet", "rs0", "--bind_ip_all"] # This works but i have to manually go into mongoshell to execute rs.initilize(), i dont want to do that
   # command: ["--replSet", "rs0", "--bind_ip_all","mongo", "rs.initiate()"] # --> Does't work
   # command: ["--replSet", "rs0", "--bind_ip_all","rs.initiate()"]          # --> Does't work
   # command: ["--replSet", "rs0", "--bind_ip_all", "mongo rs.initiate()"]   # --> Does't work

    networks:
      - dev
    ports:
      - 27017:27017
    volumes:
      - ${HOME}/mongodb:/data/db

【问题讨论】:

  • 我也希望不必执行到容器中并运行rs.initiate(),所以我也想回答这个问题。尽管 Ather 有一个问题,我将这个单节点 rs 添加到我的 docker-compose 文件中并启动它,但我无法使用连接字符串 mongodb://localhost:27017/myDB?replicaSet=rs0 连接到它,你如何连接到它?
  • 这个连接字符串对我有用(与 MongoDB Compass UI 一起使用)mongodb://localhost:27017/?replicaSet=rs0&readPreference=primary&appname=MongoDB%20Compass&directConnection=true&ssl=false

标签: mongodb replicaset


【解决方案1】:

好的,我不确定这是否是解决该问题的正确方法,但是我通过使用 Docker 的healthcheck 功能来解决这个问题。进行此更改后,我不必手动执行 rs.initiate()

详情请看docker mongo for single (primary node only) replica set (for development)?

健康检查:https://docs.docker.com/engine/reference/builder/#healthcheck

mongodb:
    image: mongo:5.0
    container_name: mongodb
    command: ["--replSet", "rs0", "--bind_ip_all"] 
      - dev
    ports:
      - 27017:27017
    volumes:
      - ${HOME}/mongodb:/data/db
    healthcheck:
      test: test $$(echo "rs.initiate().ok || rs.status().ok" | mongo -u root -p imagiaRoot --quiet) -eq 1
      interval: 10s
      start_period: 30s 

【讨论】:

    猜你喜欢
    • 2016-08-15
    • 2017-05-21
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多