最近学习 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文档]:

除了上面文档的 /docker-entrypoint-initdb.d 行为外(这是配置用户的简单方法是否可用于较少复杂的部署),此镜像也支持 Mongo_initdb_root_UsernameMongo_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 认证用户

  1. pull and run docker containers

    docker-compose up -d
    复制代码
  2. open mongo cli

    docker exec -it mongodb-container mongo admin
    复制代码
  3. create user administrator:

    db.createUser({ user: 'root', pwd: 'root', roles: [ { role: "root", db: "admin" } ] })
    复制代码

    exit mongo cli

  4. 认证管理员

    open mongo cli

    docker exec -it mongodb-container mongo admin
    复制代码

    auth root amdin

    db.auth('root', 'root')
    复制代码
  5. 创建数据库

    use test
    复制代码
  6. 创建数据库用户

    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的更多相关文章

  1. 手把手教你 Docker Compose安装DOClever

    一.什么是Docker Compose以及Docker Compose的安装和使用 查看我的另外一篇博客:Docker Compose的安装和使用 二.DOClever是什么 DOClever是一个可 ...

  2. 在Docker中安装MongoDB

    在Docker中安装MongoDB docker run -p 27017:27017 -v /data/mongodb:/data/db --name mongodb -d mongo --auth ...

  3. MongoDB从入门到实战之Docker快速安装MongoDB

    前言 在上一篇文章中带领带同学们快速入门MongoDB这个文档型的NoSQL数据库,让大家快速的了解了MongoDB的基本概念.这一章开始我们就开始实战篇教程,为了快速把MongoDB使用起来我将会把 ...

  4. Docker Compose 安装 on centos7

    本文演示如何在CentOS7上安装Docker Compose. 1 在线安装 1.1 下载安装包 $ curl -L https://github.com/docker/compose/releas ...

  5. Docker Compose安装以及入门

    Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速在集群中部署分布式应用. Compose 简介 Compose 项目是 Docker 官方的开源 ...

  6. 使用 docker compose 安装 tidb

    目标 : 单机上通过 Docker Compose 快速一键部署一套 TiDB 测试集群 前提条件: 1.centos版本在7.3 以上 2.安装git 3.安装docker Docker versi ...

  7. centos docker compose安装

    docker compose离线安装 通过联网机器下载docker-compose离线安装包(参见Downloads部分) https://github.com/docker/compose/rele ...

  8. centos7 在docker下安装mongodb

    第一步:安装 1.1 查找(查看)mongo相应的版本 [root@localhost ~]# docker search mongo INDEX NAME DESCRIPTION STARS OFF ...

  9. docker和docker compose安装使用、入门进阶案例

    一.前言 现在可谓是容器化的时代,云原生的袭来,导致go的崛起,作为一名java开发,现在慌得一批.作为知识储备,小编也是一直学关于docker的东西,还有一些持续继承jenkins. 提到docke ...

  10. Docker Compose安装部署Jenkins

    流水线可以让项目发布流程更加清晰,docker可以大大减少Jenkins配置. 1.前言 数据卷挂载到 /var 磁盘目录下,因为该磁盘空间较大,后面需要挂载容器数据卷,以防内存吃紧. 为了可以留存启 ...

随机推荐

  1. /proc/sys/vm 使用

    这些参数主要是用来调整virtual memory子系统的行为以及数据的写出(从RAM到ROM). 这些节点(参数)的默认值和初始化的过程大部分都可以在mm/swap.c中找到. 目前,/proc/s ...

  2. 数列专题2 求数列的前n项和

    \({\color{Red}{欢迎到学科网下载资料学习 }}\) [ [基础过关系列]高二数学同步精品讲义与分层练习(人教A版2019)] ( https://www.zxxk.com/docpack ...

  3. 2021年第十一届数据技术嘉年华(DTC)资料分享

    数据技术嘉年华(DTC)是由由中国DBA联盟(ACDU)和墨天轮社区联合主办的数据技术领域的盛会,至今已成功举办11届,吸引和聚集了众多数据领域学术精英.领袖人物.技术专家.从业者和技术爱好者,于此进 ...

  4. 17. ES6怎么嵌入变量

    模板字符串 具体操作: 首先 , 使用反引号包裹字符串,然后使用 ${} 嵌入变量 :

  5. 我被 .NET8 JIT 的一个BUG反复折磨了半年之久

    很久很久没有写过博客了, 正好最近园子又挣得一线生机, 必须得凑个热闹水一篇. 事情是这样的, 在今年的早些时候, 把公司的一部分api服务器的.net版本从6升级到了8, 毕竟6马上就是EOL了(. ...

  6. KubeSphere 社区双周报 | 2022-10-28

    KubeSphere 从诞生的第一天起便秉持着开源.开放的理念,并且以社区的方式成长,如今 KubeSphere 已经成为全球最受欢迎的开源容器平台之一.这些都离不开社区小伙伴的共同努力,你们为 Ku ...

  7. PBA 商业分析师 考试心得

    2021年7月报名开始学习PBA,因为疫情,中间经历两次考试延期,虽然复习时间增多了,但是学习的节奏也被打乱.好在没有白努力,今天收到了邮件,5A通过考试.在这里整理学习经验,梳理一下自己的思路,也希 ...

  8. Marklogic学习 系列专栏整理

    Marklogic学习 系列专栏整理 本人就是个松鼠怪,见到好东西都想收藏,在CSDN发现了这位博主写的一系列MarkLogic相关专栏觉得不错,今天已经看到第六个了,反正很好吃,趁着最近项目使用Ma ...

  9. 自动化构建镜像:Packer

    在介绍Packer之前,先来回顾一下未使用Packer时自定义虚拟机镜像的步骤.先在本地启动一个虚拟机,从安装系统开始,再进行自定义配置或应用安装,最后封装压缩成镜像,详细操作步骤可以参考我之前写的文 ...

  10. 一文讲透 FPGA CDC 多bit跨时钟域同步-hand-shanking机制

    一.背景 数据的跨时钟域处理是FPGA开发过程中的常见问题,存在两种情况 慢时钟向快时钟同步:只需在快时钟域打两拍即可.其RTL如下: 打拍同步的原理:大家在初学FPGA时,经常听过FPGA中对信号打 ...