最近用旧笔记本搭建了一个NAS系统,想使用Docker搭建一个即时聊天服务器Rocket.Chat。Rocket.Chat使用的是Mongo数据库,并必须启动mongo副本集,但是在Docker安装4.0以上版本的Mongo时总是无法执行配置文件启动(配置文件中可以设置副本集),网上教程大部分是4.0以下版本,本人用的Portainer服务管理Docker容器
参照网上教程上的docker命令如下
docker run \
-itd \
-e PGID=1000 \
-e PUID=1000 \
--name='mongodb' \
-e TZ="Asia/Shanghai" \
-p '27017:27017/tcp' \
-v '/mnt/wd1t_0/portainerApp/mongodb/data':'/data/db':'rw' \
--hostname mongodatabase 'mongo' \
-f /data/db/mongod.conf
复制代码
其中映射的mongod.conf文件如下
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
# how the process runs
processManagement:
timeZoneInfo: /usr/share/zoneinfo
security:
authorization:enabled
#operationProfiling:
replication:
replSetName:rs01
#sharding:
## Enterprise-Only Options:
#auditLog:
#snmp:
复制代码
这样启动不起来而且docker日志没有报错,于是进入容器中查看mongo的日志/var/log/mongodb/mongod.log 显示
{"error":"NonExistentPath: Data directory /var/lib/mongodb not found.
这应该是mongo 4以上版本的dbPath: /var/lib/mongodb有所变动
然后看了一下Portainer关于启动命令是这样的
而正常启动只需要一个‘mongod’命令即可,由于我只需要配置副本集启动即可,于是就改成了
然后就可以正常启动了
接着建立rocketchat用户
use admin
db.createUser({user: "root",pwd: "qqwweerr",roles: [{ role: "root", db: "admin"}]})
db.createUser({user: "rocketchat",pwd: "qqwweerr",roles:[{role: "readWrite", db: "local" }]})
use rocketchat
db.createUser({user: "rocketchat",pwd: "qqwweerr",roles:[{ role: "dbOwner",db: "rocketchat" }]})
复制代码
最后终于Rocket.chat启动起来了