You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何将Docker部署的单节点MongoDB转为Replica Set

将单节点MongoDB转换为副本集的操作步骤

1. 修改MongoDB启动配置(Dockerfile)

把原Dockerfile的启动命令改为副本集模式,需添加--replSet <副本集名称>(示例用rs0),同时加上--bind_ip_all确保容器内MongoDB能被正常访问:

FROM mongo:6.0

ENV MONGO_PORT=27017
ENV MONGO_REPLICA_SET=rs0

EXPOSE $MONGO_PORT

HEALTHCHECK CMD echo 'db.runCommand("ping").ok' | mongosh 127.0.0.1:$MONGO_PORT/test --quiet || exit 1

ENTRYPOINT docker-entrypoint.sh mongod --port $MONGO_PORT --replSet $MONGO_REPLICA_SET --bind_ip_all

2. 重建镜像并重启容器

执行以下命令更新镜像并重启服务:

docker-compose build mongo
docker-compose up -d mongo

3. 初始化副本集

进入MongoDB容器,用mongosh连接后执行初始化命令:

docker-compose exec mongo mongosh

在mongosh终端中运行:

rs.initiate({
  _id: "rs0",
  members: [
    { _id: 0, host: "mongo:27017" }
  ]
})

这里用docker-compose服务名mongo作为主机名,容器内可通过服务名直接访问;执行后输入rs.status()查看状态,返回ok: 1即初始化成功。

4. 更新连接字符串

将原单节点连接串修改为副本集模式,添加replicaSet=rs0参数:

mongodb://${env('MONGO_USERNAME')}:${env('MONGO_PASSWORD')}@${env('MONGO_HOST')}:${env('MONGO_PORT')}/${env('MONGO_DATABASE')}?authSource=admin&replicaSet=rs0

(可选)扩展为多节点副本集

如果需要多节点部署,修改docker-compose.yaml添加secondary节点:

volumes:
    mongo.data:
    mongo.data.secondary1:
    mongo.data.secondary2:

services:
    mongo:
        image: ${COMPOSE_PROJECT_NAME}/mongo
        container_name: ${COMPOSE_PROJECT_NAME}.mongo.docker
        restart: unless-stopped
        build:
            context: .
            dockerfile: ./mongo.Dockerfile
        env_file: envs/mongo.env
        volumes:
            - mongo.data:/data/db
        ports:
            - 127.0.0.1:${MONGO_PORT}:${MONGO_PORT}
        networks:
            - network

    mongo-secondary1:
        image: ${COMPOSE_PROJECT_NAME}/mongo
        container_name: ${COMPOSE_PROJECT_NAME}.mongo.secondary1.docker
        restart: unless-stopped
        env_file: envs/mongo.env
        volumes:
            - mongo.data.secondary1:/data/db
        networks:
            - network

    mongo-secondary2:
        image: ${COMPOSE_PROJECT_NAME}/mongo
        container_name: ${COMPOSE_PROJECT_NAME}.mongo.secondary2.docker
        restart: unless-stopped
        env_file: envs/mongo.env
        volumes:
            - mongo.data.secondary2:/data/db
        networks:
            - network

networks:
    network:
        driver: bridge

启动所有节点后,进入主节点mongosh执行以下命令添加secondary节点:

rs.add("mongo-secondary1:27017")
rs.add("mongo-secondary2:27017")

输入rs.status()可查看节点同步状态。

内容的提问来源于stack exchange,提问作者Majkon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 18:56:14