之前博客没设密码被清空之后,我暂时性将连接方式改为内部连接,不暴露mongo外部端口,但这样对远程查看操作数据库不友好,所以还是选择设置权限。
之前mongo的启动方式为docker run --name mongo-3.4 -p 27017:27017 -d mongo:3.4
,是没有挂载本地的,所以还是需要删除重新启动新镜像,需要备份mogno数据用于恢复;
备份mongo数据
可参考Docker MongoDB 数据库备份 并复制到宿主 恢复
我这里复制到/home
目录下: /home/test.tar.gz
新建mongo容器
备份到/home
目录后,可以删除容器
docker stop <你的MongodDB容器名> && docker rm <你的MongodDB容器名>`
启动新容器
docker run --name mongo-3.4 -p 27017:27017 -v ~/mongo/datadir:/data/db -d mongo:3.4 --auth
设置mongo密码
进入mongo容器
docker exec -it <你的MongodDB容器名> bash
进入mongo
mongo
进入admin库创建root用户
use admin
db.createUser({
user: 'root',
pwd: 'root',
roles: [{role: 'userAdminAnyDatabase', db: 'admin'}]
})
然后进入你需要设置密码的库(例如: test)
use test
db.createUser({
user: 'test',
pwd: 'test',
roles: [{role: 'readWrite', db: 'test'}]
})
退出mongo
exit
恢复数据
此时我们已经暴露mongo外部端口,直接执行mongorestore
tar -zxvf /home/test.tar.gz
mongorestore -h 127.0.0.1:27017 -d test /home/dump/test/
设置应用容器连接mongo链接
mongodb://test:test@mongo:27017/test
之后你就可以在本地使用robomongo等软件登录root账号查看了