Mongodb 如何在docker swarm全局模式下创建mongo副本集

Mongodb 如何在docker swarm全局模式下创建mongo副本集,mongodb,docker,global,docker-swarm,replicaset,Mongodb,Docker,Global,Docker Swarm,Replicaset,我想在docker swarm上用mode=global设置3人mongo副本集,并坚持启用复制。 例如,Docker swarm节点:节点1、节点2、节点3(所有管理器)。所有节点都是在不同的VM上创建的 接下来创建1个服务(mongo1)并以全局模式执行,以便在swarm集群中的每个节点(node1、node2、node3)上安装1个mongo容器/实例 现在,由于mongo容器端口未公开/映射到主机端口,我在不使用主机的IP/主机名的情况下初始化副本集时面临问题 从mongo提示符初始化副

我想在docker swarm上用
mode=global
设置3人mongo副本集,并坚持启用复制。 例如,Docker swarm节点:节点1、节点2、节点3(所有管理器)。所有节点都是在不同的VM上创建的

接下来创建1个服务(mongo1)并以全局模式执行,以便在swarm集群中的每个节点(node1、node2、node3)上安装1个mongo容器/实例

现在,由于mongo容器端口未公开/映射到主机端口,我在不使用主机的IP/主机名的情况下初始化副本集时面临问题

从mongo提示符初始化副本集的命令:

rs.initiate({_id : "rs", members: [{_id: 0, host: "{host1}"},  
            {_id: 1, host: "{host2}"}, {_id:2, host:"{host3}"}]})
{host1}、{host2}、{host3}
是占位符

是否仍然可以在不使用主机IP地址的情况下初始化3个成员副本集

这也可以通过使用swarm mode=replicated进行设置,其中必须使用1个副本创建3个服务,并使用服务名称初始化副本,如下所示:

rs.initiate({_id : "rs", members: [{_id: 0, host: "mongo1"},  
            {_id: 1, host: "mongo2"}, {_id:2, host:"mongo3"}]})
mono1、mongo2和mongo3是复制模式下的服务名称。
但是我只想在全局模式下进行设置

下面是堆栈文件(全局模式)

创建网络
docker网络创建——驱动程序覆盖mongo_net

你好,欢迎来到Stack Overflow。我可以请您澄清一下您的设置:如果容器端口未映射到主机端口,那么mongod进程如何能够相互通信呢?如果容器部署在swarm集群中,则无需将端口映射/公开到主机节点,因为swarm中的容器可以使用容器id相互通信
stack-file.yml:
version: "3.2"
services:
  mongo1:
    image: mongo:latest
    volumes:
      - mongo_data:/data/db
    networks:
      - mongo_net
    deploy:
      endpoint_mode: dnsrr
      mode: global
    command: mongod --replSet rs

volumes:
  mongo_data:

networks:
  mongo_net:
    external: true