使用 Docker Compose 安装 MongoDB
最近学习 Docker ,试着在 Docker 里安装 MongoDB,按照镜像 mongo 文档一顿操作猛如虎。
快速开始
写个 docker-compose.yml 文件:
version: '3.8'
services:
db:
image: mongo
container_name: mongodb-container
ports:
- '27017:27017'
command: [--auth]
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: root
volumes:
- ./.docker/mongo_data:/data/db
复制代码
启动容器:
docker-compose up
复制代码
搞定,坐等连接 MongoDB,出现报错 Authentication failed.,说我验证失败,用过 MongoDB 的都知道这玩意需要创建账号验证。
Authentication
mongo 文档上面写的有 Authentication 标题,我们翻译一下:
MongoDB中的身份验证相当复杂(尽管默认禁用)。关于MongoDB如何处理身份验证的详细信息,请参见相关的[MongoDB文档]:
- mongod --auth
- Security > Authentication
- Security > Role-Based Access Control
- Security > Role-Based Access Control > Built-In Roles
- Security > Enable Auth (tutorial)
除了上面文档的 /docker-entrypoint-initdb.d 行为外(这是配置用户的简单方法是否可用于较少复杂的部署),此镜像也支持 Mongo_initdb_root_Username 和 Mongo_initdb_root_Password,用于创建具有角色根的简单用户管理员身份验证数据库,如上面的环境变量部分所述。
默认只帮我们创建了一个超级管理员账号,还不带验证的那种。
只能求助万能网友,在 stackoverflow 搜索一圈,给我一个明灯:mongo-auth,按照它的配置一顿操作,再运行 docker-compose up,本以为没有问题:
services.mongo.environment contains {"AUTH": "yes"}, which is an invalid type, it should be a string
复制代码
算了,只能换一届网友,然后阅读各种博客文章,结论:打开 cli 客户端,在 mongo 里手动创建一个账号并验证即可。
使用 CLI 认证用户
pull and run docker containers
docker-compose up -d
复制代码open mongo cli
docker exec -it mongodb-container mongo admin
复制代码create user administrator:
db.createUser({ user: 'root', pwd: 'root', roles: [ { role: "root", db: "admin" } ] })
复制代码exit mongo cli
认证管理员
open mongo cli
docker exec -it mongodb-container mongo admin
复制代码auth root amdin
db.auth('root', 'root')
复制代码创建数据库
use test
复制代码创建数据库用户
db.createUser({ user: 'test', pwd: 'test', roles: [ { role: "readWrite", db: "test" } ] })
复制代码
注意: 如果你机器已经安装
Mongodb客户端,并且已经启动,先关闭了,如果是Windows,并且使用过服务启动Mongodb,把它关闭了。
使用脚本自动认证用户
作为一个程序员,能程序搞定的就不要动手捣鼓。我们换个姿势再来一次:
关闭容器并删除
docker-compose down
复制代码
删除本地数据映射目录
rm -fr .docker
复制代码
重写配置文件并增加几个环境变量:
version: '3.8'
services:
db:
image: mongo
container_name: mongodb-container
ports:
- '27017:27017'
command: [--auth]
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: root
MONGO_INITDB_DATABASE: cnode
MONGO_USERNAME: cnode
MONGO_PASSWORD: cnode
volumes:
- ./.docker/mongo_data:/data/db
- ./mongo-init.sh:/docker-entrypoint-initdb.d/mongo-init.sh
复制代码
真实项目环境变量需要使用
.env文件去书写,使用替换方式
增加初始化脚本 mongo-init.sh
mongo -- "$MONGO_INITDB_DATABASE" <<EOF
db = db.getSiblingDB('admin')
db.auth('$MONGO_INITDB_ROOT_USERNAME', '$MONGO_INITDB_ROOT_PASSWORD')
db = db.getSiblingDB('$MONGO_INITDB_DATABASE')
db.createUser({
user: "$MONGO_USERNAME",
pwd: "$MONGO_PASSWORD",
roles: [
{ role: 'readWrite', db: '$MONGO_INITDB_DATABASE' }
]
})
EOF
复制代码
脚本很简单,就是把上面手动操作的,一波自动完成。
docker-compose up -d
复制代码
打开程序连接试试:
使用 Docker Compose 安装 MongoDB的更多相关文章
- 手把手教你 Docker Compose安装DOClever
一.什么是Docker Compose以及Docker Compose的安装和使用 查看我的另外一篇博客:Docker Compose的安装和使用 二.DOClever是什么 DOClever是一个可 ...
- 在Docker中安装MongoDB
在Docker中安装MongoDB docker run -p 27017:27017 -v /data/mongodb:/data/db --name mongodb -d mongo --auth ...
- MongoDB从入门到实战之Docker快速安装MongoDB
前言 在上一篇文章中带领带同学们快速入门MongoDB这个文档型的NoSQL数据库,让大家快速的了解了MongoDB的基本概念.这一章开始我们就开始实战篇教程,为了快速把MongoDB使用起来我将会把 ...
- Docker Compose 安装 on centos7
本文演示如何在CentOS7上安装Docker Compose. 1 在线安装 1.1 下载安装包 $ curl -L https://github.com/docker/compose/releas ...
- Docker Compose安装以及入门
Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速在集群中部署分布式应用. Compose 简介 Compose 项目是 Docker 官方的开源 ...
- 使用 docker compose 安装 tidb
目标 : 单机上通过 Docker Compose 快速一键部署一套 TiDB 测试集群 前提条件: 1.centos版本在7.3 以上 2.安装git 3.安装docker Docker versi ...
- centos docker compose安装
docker compose离线安装 通过联网机器下载docker-compose离线安装包(参见Downloads部分) https://github.com/docker/compose/rele ...
- centos7 在docker下安装mongodb
第一步:安装 1.1 查找(查看)mongo相应的版本 [root@localhost ~]# docker search mongo INDEX NAME DESCRIPTION STARS OFF ...
- docker和docker compose安装使用、入门进阶案例
一.前言 现在可谓是容器化的时代,云原生的袭来,导致go的崛起,作为一名java开发,现在慌得一批.作为知识储备,小编也是一直学关于docker的东西,还有一些持续继承jenkins. 提到docke ...
- Docker Compose安装部署Jenkins
流水线可以让项目发布流程更加清晰,docker可以大大减少Jenkins配置. 1.前言 数据卷挂载到 /var 磁盘目录下,因为该磁盘空间较大,后面需要挂载容器数据卷,以防内存吃紧. 为了可以留存启 ...
随机推荐
- /proc/sys/vm 使用
这些参数主要是用来调整virtual memory子系统的行为以及数据的写出(从RAM到ROM). 这些节点(参数)的默认值和初始化的过程大部分都可以在mm/swap.c中找到. 目前,/proc/s ...
- 数列专题2 求数列的前n项和
\({\color{Red}{欢迎到学科网下载资料学习 }}\) [ [基础过关系列]高二数学同步精品讲义与分层练习(人教A版2019)] ( https://www.zxxk.com/docpack ...
- 2021年第十一届数据技术嘉年华(DTC)资料分享
数据技术嘉年华(DTC)是由由中国DBA联盟(ACDU)和墨天轮社区联合主办的数据技术领域的盛会,至今已成功举办11届,吸引和聚集了众多数据领域学术精英.领袖人物.技术专家.从业者和技术爱好者,于此进 ...
- 17. ES6怎么嵌入变量
模板字符串 具体操作: 首先 , 使用反引号包裹字符串,然后使用 ${} 嵌入变量 :
- 我被 .NET8 JIT 的一个BUG反复折磨了半年之久
很久很久没有写过博客了, 正好最近园子又挣得一线生机, 必须得凑个热闹水一篇. 事情是这样的, 在今年的早些时候, 把公司的一部分api服务器的.net版本从6升级到了8, 毕竟6马上就是EOL了(. ...
- KubeSphere 社区双周报 | 2022-10-28
KubeSphere 从诞生的第一天起便秉持着开源.开放的理念,并且以社区的方式成长,如今 KubeSphere 已经成为全球最受欢迎的开源容器平台之一.这些都离不开社区小伙伴的共同努力,你们为 Ku ...
- PBA 商业分析师 考试心得
2021年7月报名开始学习PBA,因为疫情,中间经历两次考试延期,虽然复习时间增多了,但是学习的节奏也被打乱.好在没有白努力,今天收到了邮件,5A通过考试.在这里整理学习经验,梳理一下自己的思路,也希 ...
- Marklogic学习 系列专栏整理
Marklogic学习 系列专栏整理 本人就是个松鼠怪,见到好东西都想收藏,在CSDN发现了这位博主写的一系列MarkLogic相关专栏觉得不错,今天已经看到第六个了,反正很好吃,趁着最近项目使用Ma ...
- 自动化构建镜像:Packer
在介绍Packer之前,先来回顾一下未使用Packer时自定义虚拟机镜像的步骤.先在本地启动一个虚拟机,从安装系统开始,再进行自定义配置或应用安装,最后封装压缩成镜像,详细操作步骤可以参考我之前写的文 ...
- 一文讲透 FPGA CDC 多bit跨时钟域同步-hand-shanking机制
一.背景 数据的跨时钟域处理是FPGA开发过程中的常见问题,存在两种情况 慢时钟向快时钟同步:只需在快时钟域打两拍即可.其RTL如下: 打拍同步的原理:大家在初学FPGA时,经常听过FPGA中对信号打 ...