使用 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 磁盘目录下,因为该磁盘空间较大,后面需要挂载容器数据卷,以防内存吃紧. 为了可以留存启 ...
随机推荐
- pip下载太慢,换源
1.安装pqi pip install pqi 2.改变pip源 比如换成清华源: pqi use tuna 3.显示当前源
- Whizard:跨越 Thanos 从开源项目到生产就绪的鸿沟
此文是根据 KubeSphere 在 KubeCon China 2024 上的演讲分享整理而成. 议题简介 作为最受欢迎和强大的 Prometheus 长期存储项目之一,Thanos 被社区广泛采用 ...
- 快速部署pxc集群
点击查看代码 同步 systemctl stop firewalld && systemctl disable firewalld systemctl stop NetworkMana ...
- appium-解决uiautomatorviewer不能定位android7以上版本元素的方法
上图是android10模拟器,发现我们是无法连接模拟器识别的 解决方法: 在模拟器内打开指定页面然后截图,最后保存为uix文件,然后用adb拉到本地,一共四个命令,可以保存为.bat文件快捷执行(这 ...
- vue3 使用swiper轮播组件
本地环境信息 node版本: nodejs : v18.20.4 npm : 10.7.0 vue版本 "dependencies": { "vue": &qu ...
- C++ 命令行传参 参数使用 坐标参数的转换
目录 1. 什么是命令行传参 2. 如何传参 3. 应用实例 4. 问题 1. 什么是命令行传参 命令行传参就是在 cmd 命令提示符, 或者 Linux shell 中使用可执行程序时, 可以添加 ...
- SpringBoot用户头像上传
1.上传到本地服务器 controller层主要以MultipartFile接收即可,这里返回给前端的该文件保存后的相对路径 @RequestMapping(value = "/applic ...
- 4年经验来面试20K的测试岗,连基础都不会,还不如招应届生。
公司前段时间缺人,也面了不少测试,结果竟然没有一个合适的.一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资在10-20k,面试的人很多,但平均水平很让人失望.看简历很多都是3.4年工作经验,但面 ...
- Nuxt.js 应用中的 nitro:build:public-assets 事件钩子详解
title: Nuxt.js 应用中的 nitro:build:public-assets 事件钩子详解 date: 2024/11/5 updated: 2024/11/5 author: cmdr ...
- AI辅助动画制作,现实到虚拟仅需要一个摄像头。多种AI技术融合赋能传统行业,或是产业趋势?
图源:youtube authour autodesk media & entertainment 不是元宇宙,是动画. 2024年10.30日.美国加利福尼亚公司 Wonder dynami ...