• 首页
  • Docker
  • docker 创建mongodb 容器 映射本地数据目录和配置文件

docker 创建mongodb 容器 映射本地数据目录和配置文件


文章目录



docker 创建mongodb 容器


安装 mongodb 镜像

拉取官方镜像

docker pull mongo

本地创建数据库目录

# zhangzhi @ ZhangZhi-MacBook-Pro in ~ [9:03:15]
$ sudo mkdir mongodb

不要忘记给目录 777 权限

sudo chmod 777  mongodb

本地配置文件目录

# zhangzhi @ ZhangZhi-MacBook-Pro in ~ [9:27:24] C:130
$ sudo mkdir docker/mongodb

不要忘记给目录 777 权限

sudo chmod 777 -R docker

docker下面所有子目录给予777权限
创建 mongodb配置文件

sudo nano mongo.conf
systemLog:
  destination: file
  path: /var/log/mongodb/mongod.log
  logAppend: true
storage:
  dbPath: /data/db
net:
  port: 27037
  bindIp: 0.0.0.0
#security:
  #authorization: enabled

注意
systemLog:
destination: file
path: /var/log/mongodb/mongod.log
logAppend: true
写入日志文件的地址是容器中的路径(不是宿主机里的地址)

storage:
dbPath: /data/db
数据库目录是容器中的路径 (不是宿主机里的地址路径)

net:
port: 27037
bindIp: 0.0.0.0
指定容器mongodb启动监听 27037 端口
0.0.0.0 是为了让宿主机可以访问容器的mongodb服务.

security:
是开启账号密码登录验证方式,用井号做了注释,暂时不需要账号密码验证方式登录.


docker 启动容器

docker run --name mongodb -v /Users/zhangzhi/mongodb:/data/db -v /Users/zhangzhi/docker/mongodb/mongo.conf:/data/configdb/mongo.conf -p 27037:27037 -d mongo -f /data/configdb/mongo.conf
--name      指定docker实例别名  mongodb

-v              指定本机文件映射容器文件
-v  /Users/zhangzhi/mongodb:/data/db
                 宿主机 /Users/zhangzhi/mongodb 数据库目录 
                 映射到容器  /data/db  目录
-v  /Users/zhangzhi/docker/mongodb/mongo.conf:/data/configdb/mongo.conf 
                宿主机mongodb配置文件  /Users/zhangzhi/docker/mongodb/mongo.conf
                映射到容器 /data/configdb/mongo.conf

-p  27037:27037
                指定容器端口 27037 映射到 本机端口 27037

-d      
                设置容器以守护进程方式运行,返回容器id

mongo   
                启动容器mongo服务

-f      
                指定配置文件
-f      /data/configdb/mongo.conf       
                容器目录下配置文件路径

--auth      
                使用账号密码登录


启动

# zhangzhi @ ZhangZhi-MacBook-Pro in ~ [15:27:17]
$ docker run --name mongodb -v /Users/zhangzhi/mongodb:/data/db -v /Users/zhangzhi/docker/mongodb/mongo.conf:/data/configdb/mongo.conf -p 27037:27037 -d mongo -f /data/configdb/mongo.conf
8ee10d21c7b996a71a9642a7c806061536c8b19173c86790c790a07c9c3c9e5d

容器启动成功,返回了容器ID
8ee10d21c7b996a71a9642a7c806061536c8b19173c86790c790a07c9c3c9e5d


检查mongo服务是否启动成功

使用宿主机中的 Robo 3T 链接容器mongodb服务

说明服务启动成功,对外暴露的 27037 端口可以被宿主机访问到.


设置数据库管理员

以admin 身份进入mongodb数据库客户端:

docker exec -it mongodb mongo --host 127.0.0.1 --port 27037 admin

mongodb 是镜像实例名称 (容器别名)
mongo 是启动mongodb客户端指令
-- host 指定主机
--port 指定27037
admin 以admin身份进入数据库客户端

如果你不改变默认 27017端口的话,上面指令可以不使用 --host 和 --port 参数

> use admin
switched to db admin

> db.createUser({ user: 'admin', pwd: 'admin', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });
Successfully added user: {
    "user" : "admin",
    "roles" : [
        {
            "role" : "userAdminAnyDatabase",
            "db" : "admin"
        }
    ]
}

插入成功后授权 admin

> db.auth("admin","admin");
1

创建数据库操作账号

> use admin
switched to db admin

> db.createUser({ user: "操作账号", pwd: "操作账号密码", roles: [ { role: "readWrite", db: "授权的数据库名" } ] });
Successfully added user: {
    "user" : "lingpao",
    "roles" : [
        {
            "role" : "readWrite",
            "db" : "lingpao"
        }
    ]
}

进入刚才授权的数据库,给刚才新增的账号授权

> use 授权的数据库名
进入当前数据库后
> db.auth("操作账号","账号密码");
授权成功

验证新增账号是否有权访问指定数据库


使用新增账号连接对应的数据库没有问题.

出自:docker 创建mongodb 容器 映射本地数据目录和配置文件

回到顶部