这是我mongo的配置文件,可以看到我是开启了复制集。复制集名为test
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# where to write logging data.
systemLog:
destination: file
logAppend: true
logRotate: reopen
path: /data/log/mongod.log
# Where and how to store data.
storage:
dbPath: /data/db
journal:
enabled: true
# engine:
# mmapv1:
wiredTiger:
engineConfig:
cacheSizeGB: 2.5
# how the process runs
#processManagement:
# fork: true # fork and run in background
# pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
# timeZoneInfo: /usr/share/zoneinfo
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
security:
# 开启登录效验
authorization: enabled
# 存放keyFile位置
keyFile: /data/keyFile
#operationProfiling:
replication:
replSetName: test
#sharding:
## Enterprise-Only Options
#auditLog:
#snmp:
setParameter:
enableLocalhostAuthBypass: false
这是我创建mongo的docke-compose.yml。因为keyFile文件要保持一样,所以用的同一个文件。
version: '3'
services:
mongo-test27:
image: mongo:4.0
container_name: mongo-test27
restart: always
privileged: true
ports:
- 37027:27017
volumes:
- /home/mongo/db/37027/config:/data/config
- /home/mongo/db/37027/db:/data/db
- /home/mongo/db/37027/log:/data/log
- /home/mongo/keyFile:/data/keyFile
environment:
TZ: 'Asia/Shanghai'
command: -f /data/config/mongod.conf
logging:
driver: json-file
options:
max-file: '2'
max-size: 100m
networks:
- mongo-test
mongo-test37:
image: mongo:4.0
container_name: mongo-test37
restart: always
privileged: true
ports:
- 37037:27017
volumes:
- /home/mongo/db/37037/config:/data/config
- /home/mongo/db/37037/db:/data/db
- /home/mongo/db/37037/log:/data/log
- /home/mongo/keyFile:/data/keyFile
environment:
TZ: 'Asia/Shanghai'
command: -f /data/config/mongod.conf
logging:
driver: json-file
options:
max-file: '2'
max-size: 100m
networks:
- mongo-test
networks:
mongo-test:
driver: bridge
注意keyFile文件的权限不能太大,因为mongo会进行效验。权限为600足矣。
然后我开开心心的启动了docke-compose up -d
这时候我发现数据库竟然起不来了
一直显示在报错重启,遇见错误第一反应就是看日志。这时候找到我挂载的log路径下的mongod.log ,tail -f mongod.log。
发现日志里 一直在报打不开 keyFile 文件,权限不够?
我仔细检查了一番,我记得我yml里写了最高权限呀。怎么会打不开 冥思苦想半小时后 想到我是-f 使用配置文件启动 会不会是mongo容器是用mongo用户启动的 然后访问被拒绝。
这个时候我先把配置文件里的keyFile文件禁用,进到容器里查看mongo的用户组是多少。
进去一看 这个用户用户组为999。
这时我直接chown 999:999 keyFile 修改文件的所有权。
然后重启容器 。
果然现在容器就起起来了~