最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

当前焦点!Windows 上 Docker 部署 MongoDb 并构建数据持久化

来源:博客园

拉取镜像

老样子先拉取一个镜像。


(相关资料图)

docker pull mongo:latest

运行容器

docker run -p 27017:27017 --name mongo -v /d/mongo/data:/data/db -e MONGO_INITDB_ROOT_USERNAME=sa -e MONGO_INITDB_ROOT_PASSWORD=Aa123456 -e TZ=Asia/Shanghai -d mongo:latest
  • -p 27017:27017:映射27017端口
  • -v /d/docker/mongo/data:/data/db:主机上的 /d/mongo/data目录映射到容器内部的 /data/db目录,这样容器内的数据将持久化保存在主机上;
  • -e MONGO_INITDB_ROOT_USERNAME=sa:创建一个 sa的用户;
  • -e MONGO_INITDB_ROOT_PASSWORD=Aa123456:并设置密码为 Aa123456;
  • -e TZ=Asia/Shanghai:时区设置为 亚洲 / 上海;
  • -d:将容器放入后台运行

通过设置环境变量 "MONGO_INITDB_ROOT_USERNAME" 和 "MONGO_INITDB_ROOT_PASSWORD",这俩个变量结合使用,创建一个新用户并设置该用户的密码。这个用户是在身份验证数据库中创建的,并被赋予root角色,这是一个“超级用户”角色。

现在可以使用 MongoDBCompass或者 Navicat来进行测试(记得禁用 ssl):

MongoDBCompass:

Navicat:

然后随便创建一些数据保存,删除容器,再运行容器查看刚刚创建的数据是否存在,如果存在则数据持久化成功。

开启远程连接

为什么要开启远程连接?开启远程连接可以让用户在其他计算机或云服务器上使用MongoDB数据库,从而实现数据共享和数据协作。

开启远程连接的方法有俩种

第一种:进入容器内部修改 mongod.conf.orig 文件

打开 PowerShell

# 进入容器内部docker exec -it mongo /bin/bash # 这边的 mongo 是因为我们之前命名了 mongo 没有命名的话就是要输入 容器idapt updateapt install vim # 安装 vim 编辑器vim /etc/mongod.conf.orig # 编辑 mongod.conf.orig

找到 bindIp: 127.0.0.1给他注释或者删除,然后加上 bindIp: 0.0.0.0这样就开启远程连接了。

设置完成之后可能要重启一下容器或者服务

第二种:在本地创建好配置文件然后把配置文件挂载到容器里

我们这边先示范 Windows 上挂载到容器内部,Linux 上的话操作也差不多:

D:\docker\mongo\conf里面创建一个 mongod.conf文件。详细配置文件参数请看:配置文件选项 — MongoDB 手册。

systemLog:   destination: file   path: "/var/log/mongodb/mongod.log" # mongod或mongos应该将所有诊断日志信息发送到的日志文件的路径,而不是标准输出或主机的syslog。MongoDB在指定的路径上创建日志文件。   logAppend: true # 当为true时,当mongos或mongod实例重新启动时,mongos或mongod将新条目追加到现有日志文件的末尾。如果没有这个选项,mongod将备份现有日志并创建一个新文件。storage:   # journal: enabled: true 启用了 MongoDB 的日志   journal:      enabled: true      # 要求连接到 MongoDB 服务器的客户端必须通过身份验证,才能执行任何操作。security:  authorization: enablednet:   # bindIp是 ,它强制 服务器,以仅侦听本地主机 IP 上的请求。仅绑定到 应用程序级系统可以访问的安全接口 系统网络过滤提供的访问控制 (即”localhost防火墙").   bindIp: 0.0.0.0 # 改成 0.0.0.0 就变成远程连接了   port: 27017   setParameter:   enableLocalhostAuthBypass: false   # 当 enableLocalhostAuthBypass 参数设置为 true 时,MongoDB 允许来自本地主机(即 127.0.0.1 或 localhost)的连接不需要进行身份验证就可以访问数据库。   # 而当 enableLocalhostAuthBypass 参数设置为 false 时,则需要对来自本地主机的连接进行身份验证,才能访问 MongoDB 数据库。

然后运行容器的时候把配置文件挂载上去

docker run -p 27017:27017 --name mongo -v /d/docker/mongo/data:/data/db -v /d/docker/mongo/conf:/etc/mongo -e MONGO_INITDB_ROOT_USERNAME=sa -e MONGO_INITDB_ROOT_PASSWORD=p@ssw0rd -e TZ=Asia/Shanghai -d mongo:latest --config /etc/mongo/mongod.conf
  • -v /d/docker/mongo/conf:/etc/mongo:主机上的 /d/docker/mongo/conf目录映射到容器内部的 /etc/mongo目录;
  • --config /etc/mongo/mongod.conf:指定使用 mongod.conf文件;

个人学习笔记,方便他人也方便自己。

关键词: 配置文件 身份验证 也差不多