基于 Docker 部署一个数据库实例通常比直接在服务器上安装数据库还要简单,Gevin 在开发环境中经常使用基于 docker 的数据库服务,docker 也渐渐成为 Gevin 在 Linux 上安装 MongoDB 的首选方式,由于 MongoDB 默认是不用通过认证就能直接连接的,出于安全考虑,在公网上部署 MongoDB 时,务必设置 authentication 机制,以避免类似 问题的发生。
那么,基于 Docker 拉起的 MongoDB,如何实现通过用户名密码访问指定数据库呢?方法很简单,但前提是要了解 MongoDB 授权访问的机制,参考资料如下:
只要了解 MongoDB 授权访问机制,直接按下面步骤一步步执行就可以了。
为了少写几个命令,Gevin 使用 Docker Compose 来创建 MongoDB 实例:
- version: '2'
- services:
- mongo:
- # restart: always
- image: mongo:3.2
- command: [--auth]
- ports:
- - "37017:27017"
- volumes:
- - /data/db
运行如下命令:
- docker-compose up -d
- #----------
- # Result:
- #----------
- # Creating mongodb_mongo_1
- docker-compose ps
- #----------
- # Result:
- #----------
- # Name Command State Ports
- # --------------------------------------------------------------------------
- # mongodb_mongo_1 / --auth Up 0.0.0.0:37017->27017/tcp
首先要进入 MongoDB 容器内部,连上 MongoDB,并切换到
数据库,这步可以通过下面命令完成:
- admin
- docker exec -it mongodb_mongo_1 mongo admin
- #----------
- # Result:
- #----------
- # MongoDB shell version: 3.2.12
- # connecting to: admin
- # Welcome to the MongoDB shell.
- # For interactive help, type "help".
- # For more comprehensive documentation, see
- #
- # Questions? Try the support group
- #
然后创建一个 user administrator:
- db.createUser({
- user: 'mongo-admin',
- pwd: 'admin-initial-password',
- roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });
- #----------
- # Result:
- #----------
- Successfully added user: {
- "user" : "mongo-admin",
- "roles" : [
- {
- "role" : "userAdminAnyDatabase",
- "db" : "admin"
- }
- ]
- }
创建了 user administrator 后,需要退出 mongodb,并重新连接,然后用 user administrator 访问 admin 数据库,并为目标数据库创建目标用户,其具体步骤如下:
(1)重新连接 MongoDB 数据库
退出容器,重新用下面命令进入容器即可:
- docker exec -it mongodb_mongo_1 mongo admin
- #----------
- # Result:
- #----------
- MongoDB shell version: 3.2.12
- connecting to: admin
(2)授权登录 admin
- db.auth("mongo-admin","admin-initial-password")
(3)创建访问指定数据库的用户
- # Step1: switch to the specified database:
- use octblog
- # Step2: create a user
- db.createUser(
- {
- user: "gevin",
- pwd: "gevin",
- roles: [ { role: "readWrite", db: "octblog" },
- { role: "readWrite", db: "octblog-log" } ]
- }
- )
- #----------
- # Result:
- #----------
- #Successfully added user: {
- # "user" : "gevin",
- # "roles" : [
- # {
- # "role" : "readWrite",
- # "db" : "octblog"
- # },
- # {
- # "role" : "readWrite",
- # "db" : "octblog-log"
- # }
- # ]
- #}
这一步的目标是为
这个数据库创建一个授权访问用户,首先要从
- octblog
数据库切换到
- admin
数据库,然后才能为
- octblog
添加授权访问用户
- octblog
- mongo-admin
来源: http://www.tuicool.com/articles/iaIVB3