应用docker搭建一主二从的replica set,并且保障golang driver能胜利连贯到该构造。
有如下目录构造:

.├── config│   └── config.sh└── docker-compose.yml

其中docker-compose.yml文件内容如下:

version: "3.8"services:    mongo_setup:        image: mongo:5.0.0        hostname: mongo_setup        container_name: mongo_setup        volumes:             - ./config:/rs_config        entrypoint: /usr/bin/bash /rs_config/config.sh        restart: "no"        networks:            - mongo_net        depends_on:            - mongo1            - mongo2            - mongo3    mongo1:        image: mongo:5.0.0        hostname: mongo1        container_name: mongo1        entrypoint: /usr/bin/mongod --port 27117 --replSet "rs0" --bind_ip_all        ports:             - 27117:27117        networks:            - mongo_net        restart: on-failure    mongo2:        image: mongo:5.0.0        hostname: mongo2        container_name: mongo2        entrypoint: /usr/bin/mongod --port 27217 --replSet "rs0" --bind_ip_all        ports:             - 27217:27217        networks:            - mongo_net        restart: on-failure            mongo3:        image: mongo:5.0.0        hostname: mongo3        container_name: mongo3        environment:             - RS_NAME=rs0        entrypoint: /usr/bin/mongod --port 27317 --replSet "rs0" --bind_ip_all        ports:             - 27317:27317        networks:            - mongo_net        restart: on-failurenetworks:    mongo_net:

config.sh是用于配置主从的脚本,内容如下:

#/bin/bashRS_NAME=rs0MASTER=mongo1REPLICA_1=mongo2REPLICA_2=mongo3until mongosh --host $MASTER --port 27117 --quiet <<EOFexitEOFdo  sleep 5donemongosh --host $MASTER --port 27117 --quiet <<EOFrs.initiate(  {     _id: "$RS_NAME",     version: 1,     members: [        { _id: 0, host : "${MASTER}:27117", priority: 2 },        { _id: 1, host : "${REPLICA_1}:27217", priority: 1 },        { _id: 2, host : "${REPLICA_2}:27317", priority: 1 }     ]  })EOF

按如上配置,就能够应用docker-compse up启动该主从实例。
不过,如果在宿主机上应用golang driver来连贯该实例,会产生谬误,起因在于,连贯到master后,master返回其余正本的信息,而后客户端尝试连贯其余正本,而因为宿主机与正本不在同一个网络里,因而无奈胜利通信。
解决的方法是配置宿主机的host,利用hosts文件来帮忙宿主机解析其余正本的地址,减少上面几行:

# for mongodb replica127.0.0.1  mongo1127.0.0.1  mongo2127.0.0.1  mongo3

OK.