当前位置: 首页 > article >正文

Docker部署 MongoDB及常用命令

docker 部署

docker run -d \
 --name mongo \
 -e MONGO_INITDB_ROOT_USERNAME=root \
 -e MONGO_INITDB_ROOT_PASSWORD=123456 \
 -p 27017:27017 \
 -v ./local-mongo-data:/data/db \
 mongo:latest

或者编写 docker-compose.yaml 文件。如下:

version: '3.1'

services:
  mongo:
    image: mongo:latest
    container_name: mongo
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: 123456
    ports:
      - 27017:27017
    volumes:
      - ./local-mongo-data:/data/db  # 挂载本地目录到容器的数据目录

常用命令

# 登录
mongosh -u root -p --authenticationDatabase admin ## 输入密码
## 查看数据库
show dbs
## 切换数据库
use [dbname]
## 查看表
show tables
## 查看数据
db.[table name].find()

创建用户

1. 连接到 MongoDB

首先,连接到 MongoDB 实例 使用管理员权限
bash mongosh -u root -p --authenticationDatabase admin

2. 选择数据库

你可以在任意数据库中创建角色,通常会在 admin 数据库中创建全局角色,或者在某个特定的数据库中创建角色。

use mydatabase  // 选择一个特定的数据库,或使用 admin 数据库

3. 创建角色

使用 db.createRole() 方法来创建一个角色。你可以指定该角色的权限、作用域以及可以访问的数据库。

语法:

db.createRole({
  role: "roleName",  // 角色名称
  privileges: [       // 权限数组
    {
      resource: { db: "databaseName", collection: "collectionName" },  // 权限作用的数据库和集合
      actions: [ "action1", "action2" ]  // 角色具有的操作权限,如 "find", "insert", "update" 等
    }
  ],
  roles: [            // 角色继承其他角色
    { role: "otherRoleName", db: "databaseName" }
  ]
});

4. 角色权限说明

MongoDB 中的权限可以控制特定的操作(如读取、写入、创建索引等)。以下是一些常见的操作权限:

  • "find":读取文档。
  • "insert":插入文档。
  • "update":更新文档。
  • "remove":删除文档。
  • "createCollection":创建集合。
  • "createIndex":创建索引。
  • "dropCollection":删除集合。
  • "dropIndex":删除索引。

5. 示例:创建一个自定义角色

假设我们希望为 mydatabase 创建一个角色,该角色允许用户在该数据库中进行插入和查询操作。我们可以使用以下命令:

db.createRole({
  role: "insertAndFindRole",  // 角色名称
  privileges: [
    {
      resource: { db: "mydatabase", collection: "" },  // 对 mydatabase 数据库的所有集合进行权限控制
      actions: ["find", "insert"]  // 该角色具有 "find" 和 "insert" 权限
    }
  ],
  roles: []  // 不继承其他角色
});

6. 查看已创建的角色

要查看当前数据库中所有的角色,可以使用以下命令:

show roles

或者查看特定数据库中的角色:

use mydatabase
show roles

7. 将角色授予用户

创建角色后,您可以将角色分配给用户。使用 db.grantRolesToUser() 来给用户分配角色。

db.grantRolesToUser("myuser", [
  { role: "insertAndFindRole", db: "mydatabase" }
]);

或者创建用户

db.createUser({ user: "user", pwd: "123456", roles: [{role: "insertAndFindRole", db: "test" }]})

8. 删除角色

如果你不再需要某个角色,可以使用 db.dropRole() 删除它:

db.dropRole("insertAndFindRole");

常见问题

1. 无法登录 MongoDB

问题描述:

当你创建了 MongoDB 用户后,可能会遇到用户无法登录的问题。

解决方法:

MongoDb的用户是与数据库绑定的,默认使用创建用户时所在的数据库作为认证数据库。如果用户在一个数据库中创建,但在登录时没有正确指定认证数据库,可能会导致认证失败。

为了解决这个问题,可以通过在连接字符串中添加 ?authSource=admin 来明确指定认证数据库。

示例:

如果你在 admin 数据库中创建了用户,但尝试登录其他数据库,可以使用如下连接方式:

mongo -u <username> -p <password> --authenticationDatabase admin --db <your-database>

或者,如果通过 URL 连接:

mongodb://<username>:<password>@localhost:27017/<your-database>?authSource=admin

这样可以确保 MongoDB 正确地在 admin 数据库中进行身份验证。


http://www.kler.cn/a/559014.html

相关文章:

  • java八股文之数据库
  • 超高清大图渲染性能优化实战:从页面卡死到流畅加载
  • 短剧源码搭建部署海外短剧系统
  • sql的索引与性能优化相关
  • 【新手初学】SQL注入之二次注入、中转注入、伪静态注入
  • 【愚公系列】《鸿蒙原生应用开发从零基础到多实战》002-TypeScript 类型系统详解
  • 2025年AI科技热点全景:人形机器人量产、垂类应用崛起与推理模型革新引领未来
  • ubuntu环境中安装latex并使用vscode
  • 区块链共识机制详解
  • [250222] Kimi Latest 模型发布:尝鲜最新特性与追求稳定性的平衡 | SQLPage v0.33 发布
  • CSS中的`position`属性的几种定位方式
  • QML Button 部件的使用
  • Unity打包APK报错 using a newer Android Gradle plugin to use compileSdk = 35
  • Jupyter Notebook切换虚拟环境(Kernel管理)
  • 创建React项目的三个方式
  • 在MAC上面通过HomeBrew安装node和npm@指定版本
  • 【Winform】深入理解C#中的异常处理:以WinForms应用程序为例
  • Windows、Mac、Linux,到底该怎么选?
  • 计算机视觉算法
  • 从零开始玩转TensorFlow:小明的机器学习故事 4