Skip to content

Docker 安装 MongoDB

官方镜像:https://hub.docker.com/_/mongo

Github: https://github.com/mongodb/mongo

官方文档:https://www.mongodb.com/

shell
$ docker run \
--name mongo \
--restart=unless-stopped \
-p 27017:27017 \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=123456 \
-d mongo:4.4.17

命令说明:

  • -e MONGO_INITDB_ROOT_USERNAME:管理员账号
  • -e MONGO_INITDB_ROOT_PASSWORD:管理员密码
shell
# 进入容器
docker exec -it mongo /bin/bash

# 打开 mongo 命令行
> mongo

> use admin

> db.auth('admin', '123456');

> use aaadb

> db.createUser({user: "aaa",pwd: "123456",roles: [ { role: "dbOwner", db: "aaadb" } ]});

# show dbs 要看到使用 use aaadb; 创建的数据库,需要插入至少一个数据才能查到。
# 简单插入空文档
> db.dummy.insertOne({});

# 现在就可以查到创建的 aaadb 数据库了。
> show dbs;

url 连接格式

shell
# admin 用户
mongodb://admin:123456@127.0.0.1:27017/aaadb?authSource=aaadb&authMechanism=SCRAM-SHA-1

# 自己创建的 aaa 用户
mongodb://aaa:123456@127.0.0.1:27017/aaadb?authSource=aaadb&authMechanism=SCRAM-SHA-1

连接字符串结构解析

shell
mongodb://admin:123456@127.0.0.1:27017/aaadb?authSource=aaadb&authMechanism=SCRAM-SHA-1
组成部分说明
mongodb://MongoDB连接协议前缀
admin:123456认证信息:用户名admin,密码123456
@127.0.0.1:27017服务器地址:本地IP,默认MongoDB端口27017
/aaadb要连接的目标数据库名称
?authSource=aaadb身份验证数据库(用户凭证存储的数据库)
&authMechanism=SCRAM-SHA-1认证机制:使用SCRAM-SHA-1加密方式

关键参数详解

1. 认证数据库 (authSource)

  • authSource=aaadb 表示用户 admin 是在 aaadb 数据库中创建的
  • 这与要连接的数据库名称相同,说明是数据库专属用户。
  • 如果用户创建在 admin 数据库,这里应该是 authSource=admin

2. 认证机制 (authMechanism)

  • SCRAM-SHA-1 是MongoDB的传统认证机制
  • 现代MongoDB版本默认使用更安全的 SCRAM-SHA-256
  • 这个参数通常可以省略,MongoDB会自动协商最佳机制

命令行连接

bash
# 进入容器
docker exec -it mongo /bin/bash

# 使用 mongosh (MongoDB Shell)
mongosh "mongodb://admin:123456@127.0.0.1:27017/aaadb?authSource=aaadb"

# 或者使用旧版 mongo shell
mongo "mongodb://admin:123456@127.0.0.1:27017/aaadb?authSource=aaadb"

重要注意事项

  1. 用户必须存在:确保在 aaadb 数据库中已经创建了用户 admin

    javascript
    use aaadb
    db.createUser({
      user: "admin",
      pwd: "123456",
      roles: [{ role: "readWrite", db: "aaadb" }]
    })
  2. 安全建议

    • 生产环境使用更强的密码
    • 考虑使用 SCRAM-SHA-256 认证机制
    • 建议用户创建在 admin 数据库而非应用数据库