之前在openwrt上用docker搭建的姥爷级聊天室软件 rocketchat 4.8.7,数据库 是mongo 4.0,也是姥姥级别的,需要迁移到服务器上,说说经过。
先在新服务器上搭建好新的docker环境,然后重新把姥爷级的rocketchat4.8.7从dockhub上拉下来,配置文件如下:
services:
rocketchat:
image: rocket.chat:4.8.7
command: >
bash -c
"for i in `seq 1 30`; do
node main.js &&
s=$$? && break || s=$$?;
echo \"Tried $$i times. Waiting 5 secs...\";
sleep 5;
done; (exit $$s)"
restart: unless-stopped
volumes:
- /volume1/docker/rocketchat/uploads:/app/uploads
environment:
- PORT=3000
- ROOT_URL=http://flgame.cycx.top
- MONGO_URL=mongodb://mongo:27017/rocketchat
- MONGO_OPLOG_URL=mongodb://mongo:27017/local
depends_on:
- mongo
ports:
- 3001:3000
mongo:
image: mongo:4.0
restart: unless-stopped
volumes:
- /volume1/docker/rocketchat/data:/data/db
- /volume1/docker/rocketchat/dump:/dump
command: mongod --smallfiles --oplogSize 128 --replSet rs0 --storageEngine=mmapv1
mongo-init-replica:
image: mongo:4.0
command: >
bash -c
"for i in `seq 1 30`; do
mongo mongo/rocketchat --eval \"
rs.initiate({
_id: 'rs0',
members: [ { _id: 0, host: 'localhost:27017' } ]})\" &&
s=$$? && break || s=$$?;
echo \"Tried $$i times. Waiting 5 secs...\";
sleep 5;
done; (exit $$s)"
depends_on:
- mongo
然后访问ip:3001,能打开web端就说明第一步是ok的
进入openwrt的docker(源数据库),进行备份:
docker exec -it rocket-chat-mongo-db bash
mongodump
直接运行备份命令,会备份所有数据库,保存路径:/dump/
然后会得到三个目录:

将这三个目录复制到刚刚配置好的新rocketchat机器中的/dump/目录下,然后进入docker容器,运行还原命令。
docker exec -it rocket-chat-new-mongo-db bash
mongorestore --drop
本来以为重启容器这就完事了结果一看,数据原封不动,完全没有恢复的迹象,然后开始排查,终于发现故障原因:
先检查源数据库中的数据库列表,运行命令:
mongo
show dbs

发现只有四个,老机器用的数据库是最先面那个叫meteor的,然后和目标刚刚还原完的做一下比较:

发现新的机器有五个库,看来是rocketchat487自作聪明自己新建了一个叫rocketchat的库,既然新机器只认rocketchat库,那我把恢复好的meteor库改名成rocketchat不就成了,于是运行改名命令:
db.copyDatabase("meteor","rocketchat")
改完之后,重启容器,终于好了。
