docker-compose 配置启动2个MongoDB
要将原配置扩展为启动两个独立的MongoDB容器,需要分别定义两个服务,每个服务使用不同的名称、端口、卷路径、环境变量和容器名称以避免冲突。以下是修改后的docker-compose.yml
:
version: '3'
services:# 第一个MongoDB服务mongo1: # 服务名称改为mongo1image: mongocontainer_name: mongo_instance1 # 唯一容器名称restart: alwaysenvironment:MONGO_INITDB_ROOT_USERNAME: admin_user1 # 建议使用不同用户名MONGO_INITDB_ROOT_PASSWORD: secure_pass1 # 建议使用不同密码volumes:- /mnt/mongodb/data1:/data/db # 数据目录1- /mnt/mongodb/backup1:/data/backup # 备份目录1ports:- "27017:27017" # 暴露到宿主机的端口(确保无冲突)command: ["--auth"]# 第二个MongoDB服务(在原mongo2基础上修改)mongo2: image: mongocontainer_name: mongo_instance2 # 唯一容器名称restart: alwaysenvironment:MONGO_INITDB_ROOT_USERNAME: admin_user2 # 不同用户名MONGO_INITDB_ROOT_PASSWORD: secure_pass2 # 不同密码volumes:- /mnt/mongodb/data2:/data/db # 原配置的数据目录- /mnt/mongodb/backup2:/data/backup # 原配置的备份目录ports:- "27018:27017" # 保持原宿主机端口27018command: ["--auth"]
关键修改说明:
-
服务分离
- 创建两个独立服务
mongo1
和mongo2
- 每个服务拥有唯一的
container_name
(mongo_instance1
和mongo_instance2
)
- 创建两个独立服务
-
避免端口冲突
mongo1
使用宿主机端口27017
→ 容器端口27017
mongo2
保持原宿主机端口27018
→ 容器端口27017
-
独立存储卷
- 为每个容器分配独立的数据目录(
/mnt/mongodb/data1
和/data2
) - 独立备份目录(
/mnt/mongodb/backup1
和/backup2
)
- 为每个容器分配独立的数据目录(
-
安全隔离
- 为每个实例设置不同的用户名密码(避免权限交叉)
启动命令:
docker-compose up -d # 同时启动两个容器
连接示例:
- 连接第一个MongoDB:
mongodb://admin_user1:secure_pass1@localhost:27017
- 连接第二个MongoDB:
mongodb://admin_user2:secure_pass2@localhost:27018
⚠️ 重要:确保宿主机目录(如
/mnt/mongodb/data1
)已提前创建且权限正确(chmod 757
),否则容器可能无法启动。