Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用docker和fig设置mongodb副本集的正确方法是什么?_Mongodb_Docker_Replicaset_Fig - Fatal编程技术网

使用docker和fig设置mongodb副本集的正确方法是什么?

使用docker和fig设置mongodb副本集的正确方法是什么?,mongodb,docker,replicaset,fig,Mongodb,Docker,Replicaset,Fig,使用docker和fig设置mongodb副本集的正确方法是什么 我试图按照官方要求创建一个带有一些副本集的fig.yml文件,但总是被如何正确调用rs.initiate()和rs.add(“”所阻止 我找到了解释为什么我不能从shell,而不调用rs.initiate() 哦,我使用(v2.6.5)作为基本映像,没有任何修改。在设置副本集之前,首先停止mongod服务 service mongodb stop mongod--port“port”--dbpath“YOUR\u DB\u D

使用docker和fig设置mongodb副本集的正确方法是什么

我试图按照官方要求创建一个带有一些副本集的
fig.yml
文件,但总是被如何正确调用
rs.initiate()
rs.add(“”
所阻止

我找到了解释为什么我不能从
shell
,而不调用
rs.initiate()


哦,我使用(v2.6.5)作为基本映像,没有任何修改。

在设置副本集之前,首先停止mongod服务

 service mongodb stop
mongod--port“port”--dbpath“YOUR\u DB\u DATA\u PATH”--replSet“REPLICA\u SET\u INSTANCE\u NAME”

它将在端口27017上启动名为rs0的mongod实例。现在启动命令提示符并连接到此mongod实例

在mongo客户端中,发出命令rs.initiate()以启动新的副本集

 rs.initiate()
要检查副本集配置,请发出命令rs.conf()

rs.conf()

{
"_id" : "rs0"
"version" : 1,
"members" : [
    {
        "_id" : 0,
        "host" "localhost:27017"
    },
    {
        "_id" : 1,
        "host" "localhost:27018"
    },
    {
        "_id" : 2,
        "host" "localhost:27019"
    }
]
}
现在,您可以通过引用提供的主机名将其他节点添加到复制集中

 rs.add("localhost:27019")
 { "ok" : 1 }
对每个剩余的复制成员执行此操作。您的复制集现在应该已启动并正在运行

要检查副本集的状态,请发出命令rs.status()

rs.status()

希望这有帮助。

我也遇到过类似的问题,我就是这么做的。我用docker compose代替fig

在我的码头上

mongors:                                                                                                
  image: mongo                                                                                          
  ports:                                                                                                
    - "27017:27017"                                                                                     
  volumes:                                                                                              
   - ./mongo:mongo                                                                                      
  entrypoint: mongo/entrypoint.sh
在我的entrypoint.sh中:

#!/bin/bash
mongod --port 27018 --replSet rs0 --fork --syslog --smallfiles
mongo --port 27018 --eval "rs.initiate({_id : 'rs0', members : [{_id : 0, host : 'localhost:27018'}]})"
mongo --port 27018 --eval "while(true) {if (rs.status().ok) break;sleep(1000)};"
确保它是可执行的:

chmod +x mongo/entrypoint.sh

这有点老套,但很有效:)

这不是关于在docker/fig上设置副本集,而是关于在测试环境中设置副本集。是的,还可以自动化过程。。。整个要点是启动fig或docker映像,而不必担心输入更多命令或检查状态。。。你刚才描述了我在问题中已经发布的链接
chmod +x mongo/entrypoint.sh