peekvision/peek-mongo本镜像基于官方MongoDB镜像优化,专为MongoDB副本集(Replica Set)部署设计,简化了副本集的配置与运行流程。通过该镜像可快速构建包含主节点(Primary)、从节点(Secondary)和仲裁节点(Arbiter)的MongoDB集群,提供数据冗余、读写分离和自动故障转移能力,适用于对数据可用性有较高要求的场景。
bashdocker run -d \ --name mongo-replica \ -p 27017:27017 \ -e MONGO_INITDB_ROOT_USERNAME=admin \ -e MONGO_INITDB_ROOT_PASSWORD=password \ -e REPLICA_SET_NAME=rs0 \ -v mongo-data:/data/db \ mongo:latest --replSet rs0 --bind_ip_all
创建docker-compose.yml文件:
yamlversion: '3.8' services: mongo1: image: mongo:latest container_name: mongo1 ports: - "27017:27017" environment: - MONGO_INITDB_ROOT_USERNAME=admin - MONGO_INITDB_ROOT_PASSWORD=password - REPLICA_SET_NAME=rs0 volumes: - mongo1-data:/data/db command: --replSet rs0 --bind_ip_all networks: - mongo-replica-net mongo2: image: mongo:latest container_name: mongo2 ports: - "27018:27017" environment: - MONGO_INITDB_ROOT_USERNAME=admin - MONGO_INITDB_ROOT_PASSWORD=password volumes: - mongo2-data:/data/db command: --replSet rs0 --bind_ip_all networks: - mongo-replica-net mongo3: image: mongo:latest container_name: mongo3 ports: - "27019:27017" environment: - MONGO_INITDB_ROOT_USERNAME=admin - MONGO_INITDB_ROOT_PASSWORD=password volumes: - mongo3-data:/data/db command: --replSet rs0 --bind_ip_all networks: - mongo-replica-net volumes: mongo1-data: mongo2-data: mongo3-data: networks: mongo-replica-net: driver: bridge
启动集群:
bashdocker-compose up -d
bashdocker exec -it mongo1 mongosh -u admin -p password --authenticationDatabase admin
javascriptrs.initiate({ _id: "rs0", members: [ {_id: 0, host: "mongo1:27017"}, {_id: 1, host: "mongo2:27017"}, {_id: 2, host: "mongo3:27017"} ] })
javascriptrs.status()
| 环境变量 | 描述 | 默认值 |
|---|---|---|
MONGO_INITDB_ROOT_USERNAME | 初始化数据库的root用户名 | - |
MONGO_INITDB_ROOT_PASSWORD | 初始化数据库的root密码 | - |
REPLICA_SET_NAME | 副本集名称 | rs0 |
MONGO_INITDB_DATABASE | 初始化的数据库名称 | admin |
MONGO_OPTS | 额外的MongoDB启动参数(如--wiredTigerCacheSizeGB=1) | - |
通过Docker卷(Volume)挂载/data/db目录实现数据持久化,示例:
bashdocker run -d \ -v /host/path/to/data:/data/db \ --name mongo-replica \ mongo:latest --replSet rs0
若需向现有副本集添加新节点,启动新容器后执行:
javascriptrs.add("new-node-host:27017")
--auth参数)和TLS/SSL加密rs.addArb("arbiter-host:27017")添加manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务