使用 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 磁盘目录下,因为该磁盘空间较大,后面需要挂载容器数据卷,以防内存吃紧. 为了可以留存启 ...
随机推荐
- 盘点.NET支持的 处理器架构
在一个会议上,中国招投标协会的技术负责人居然当着很多领导的面说.NET不能在国产服务器上运行,可以说这个技术负责人非蠢即坏.国产服务器的处理器架构主要包括x86.ARM.LoongArch.risc- ...
- 云原生周刊:Helm Charts 深入探究 | 2024.3.11
开源项目推荐 Glasskube Glasskube 提供了一个用于 Kubernetes 的缺失的包管理器.它具有图形用户界面(GUI)和命令行界面(CLI).Glasskube 包是具备依赖感知. ...
- insufficient permission for adding an object to repository database .git/objects
1.出错截图: 有时候使用软件项目管理系统github时候,会出现一些问题截图如下: 2.出错原因 从出错的地方就知道是因为权限不足导致,回想一下,在链接远程服务器时候,不小心切换为管理员权限进行了g ...
- Runtime类的简单应用
1.描述 Runtime:描述运行时状态. 在整个JVM中,Runtime类是唯一一个与JVM运行状态有关的类,且默认提供一个该类的实例化对象. 由于在每一个JVM进程中只允许提供一个Runtime类 ...
- css常用布局之flex布局
Flexbox 是一个一维的布局模式,它可以轻松地在不同的方向上排列子元素(称为 flex 项),即使它们的大小是未知或者是动态变化的.以下是 Flexbox 的一些关键概念: 容器和项: 启用 Fl ...
- 使用 Cursor 和 Devbox 快速开发并上线 Gin 项目
作为开发者,最让我们头疼的事情是什么?那必须是环境配置.版本控制以及各种部署配置等等繁琐的工作. 想象一下,如果你只需点击几下鼠标,就能拥有一个完全配置好的开发环境,支持从 Java 到 Python ...
- SpringBoot入门到精通(十三)日志:别小看它,否则吃亏的是自己!学会你也可以设计架构
别小看他,当你面对的时候,就会知道,多么痛的领悟! 如何在 Spring Boot 中使用 Logback 记录详细的日志? 整合LogBack,Log4J...等,是不是很多方法!但需要注意,我讲的 ...
- 指针进阶(回调函数)(C语言)
目录 1. 回调函数是什么? 2. qsort 使用 2.1 使用qsort函数排序整形数据 2.2 使用qsort排序结构数据 3. qsort函数的模拟实现 1. 回调函数是什么? 回调函数就是一 ...
- Antlr4 语法解析器(下)
Antlr4 的两种AST遍历方式:Visitor方式 和 Listener方式. Antlr4规则文法: 注释:和Java的注释完全一致,也可参考C的注释,只是增加了JavaDoc类型的注释: 标志 ...
- 拿去面试!一个基于 DDD 的高性能短链系统
众所周知,商城.RPC.秒杀.论坛.外卖.点评等项目早早就烂大街了,翻开同学的简历一看 10 个里面有 9 个是这些,翻遍全网再很难找到一个既有含金量又能看得懂的项目,针对此,我研发了这样一个可以快速 ...