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

如何在Docker容器中升级已部署的MongoDB 4.0版本(适配Rocket.Chat)

Docker环境下MongoDB 4.0副本集升级指南

先做好准备工作

  • 先备份MongoDB数据,避免升级翻车丢数据:
    docker exec db mongodump --out /backup
    docker cp db:/backup ./mongo-backup
    
  • 提前查好你用的Rocket.Chat版本兼容的MongoDB版本,比如Rocket.Chat 6.x及以上支持MongoDB 5.0/6.0,别升完MongoDB才发现Rocket.Chat不兼容

升级步骤(必须按相邻大版本逐步升,比如4.0→4.2→4.4→5.0,这里以升到5.0为例)

1. 先停掉相关服务

先把Rocket.Chat容器停了,不然升级MongoDB的时候它一直在读写数据容易出问题:

docker stop rocketchat

2. 先升到MongoDB 4.2

  • 停掉旧的MongoDB 4.0容器:
    docker stop db
    
  • 先确认一下数据卷的位置(如果用的是默认匿名卷,执行下面命令找本地路径或卷名):
    docker inspect db | grep -E "Source|Name"
    
  • 启动MongoDB 4.2的临时容器,复用原来的数据卷,保持副本集配置不变:
    docker run --name db-temp -d \
      --volumes-from db \
      mongo:4.2 --replSet rs0 --oplogSize 128
    
  • 进入容器检查并升级特性兼容版本(FCV):
    # 先看当前FCV版本,应该是4.0
    docker exec -ti db-temp mongo --eval "printjson(db.adminCommand({ getParameter: 1, featureCompatibilityVersion: 1 }))"
    # 把FCV升到4.2
    docker exec -ti db-temp mongo --eval "printjson(db.adminCommand({ setFeatureCompatibilityVersion: '4.2' }))"
    
  • 验证没问题后,替换掉旧容器:
    docker stop db-temp
    docker rm db
    docker rename db-temp db
    docker start db
    

3. 再升到MongoDB 4.4

步骤和上面差不多:

  • 停掉db容器:
    docker stop db
    
  • 启动4.4的临时容器复用数据卷:
    docker run --name db-temp -d \
      --volumes-from db \
      mongo:4.4 --replSet rs0 --oplogSize 128
    
  • 升级FCV到4.4:
    docker exec -ti db-temp mongo --eval "printjson(db.adminCommand({ setFeatureCompatibilityVersion: '4.4' }))"
    
  • 替换容器:
    docker stop db-temp
    docker rm db
    docker rename db-temp db
    docker start db
    

4. 最后升到MongoDB 5.0(或你需要的更高兼容版本)

  • 停掉db容器:
    docker stop db
    
  • 启动5.0的临时容器复用数据卷:
    docker run --name db-temp -d \
      --volumes-from db \
      mongo:5.0 --replSet rs0 --oplogSize 128
    
  • 升级FCV到5.0:
    docker exec -ti db-temp mongo --eval "printjson(db.adminCommand({ setFeatureCompatibilityVersion: '5.0' }))"
    
  • 替换容器:
    docker stop db-temp
    docker rm db
    docker rename db-temp db
    docker start db
    

5. 重启Rocket.Chat容器

直接启动就行,因为复用了原来的db容器名,连接配置不用改,但建议用兼容新MongoDB版本的Rocket.Chat镜像:

docker run --name rocketchat -p 80:3000 --link db \
  --env ROOT_URL=http://localhost \
  --env MONGO_OPLOG_URL=mongodb://db:27017/local \
  -d rocket.chat:latest

几个要注意的点

  • 绝对不能跨大版本直接升,比如从4.0直接跳到5.0,肯定会搞坏数据
  • 每次升级完都要检查副本集状态是否正常:
    docker exec -ti db mongo --eval "printjson(rs.status())"
    
  • 如果你用的是自己创建的自定义数据卷,启动容器的时候用-v 你的数据卷路径:/data/db代替--volumes-from db
  • 确认升级后一切正常,再删掉之前的备份

内容的提问来源于stack exchange,提问作者МЫКЫТО КОЖЕМЯКА

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 07:07:02