首页 > 数据库 >使用 Docker Compose 安装 MongoDB

使用 Docker Compose 安装 MongoDB

时间:2023-05-01 14:12:05浏览次数:56  
标签:Compose mongo MongoDB 代码 db 复制 Docker root docker

最近学习 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 的都知道这玩意需要创建账号验证。

image.png

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
复制代码

打开程序连接试试:

image.png

image.png

 

标签:Compose,mongo,MongoDB,代码,db,复制,Docker,root,docker
From: https://www.cnblogs.com/exmyth/p/17366456.html

相关文章

  • Docker CLI docker compose port常用命令
    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。Docker是内核虚拟化,不使用Hypervisor是不完全虚拟化,依赖内核的特性实现资源隔离。本文主要介绍DockerCLI中d......
  • 云原生之使用Docker部署webssh工具sshwifty
    (云原生之使用Docker部署webssh工具sshwifty)一、sshwifty介绍1.sshwifty简介sshwifty是一款WebSSH&Telnet(WebSSH&WebTelnet客户端工具。2.shwifty特点shwifty是为Web设计的SSH和Telnet连接器。它可以部署在您的计算机或服务器上,为任何兼容(标准)的网络浏览器......
  • mongoDB基本使用
    一:简介MongoDB是一个非关系型数据库(NoSQL).非常适合超大数据集的存储,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。二:MongoDB安装(w......
  • python操作MongoDB数据库
    python处理mongodb首选就是pymongo.首先,安装一下这个模块pipinstallpymongo建立连接importpymongoconn=pymongo.MongoClient(host='localhost',port=27017)#切换数据库py=conn['python']#登录该数据库(需要的话)py.authenticate("python_admin",'......
  • 如何给正在运行的docker容器添加端口映射
    我们都知道启动docker容器的时候可以使用-d参数进行端口映射,但是如果你的容器已经创建出来了但是突然又想要添加一个端口映射,这时总不能重新创建一个容器吧,之前的工作不都白费了吗有一个办法就是先将当前已经配置过的容器打包成新的镜像,然后用这个镜像生成一个新的容器,这样所做的......
  • 制作一个包含Centos7+Nginx+Mysql8+JDK8的Docker镜像
    1.创建一个文件夹用于构建Docker镜像:mkdirmy-docker-imagecdmy-docker-image2.在该文件夹中创建一个名为Dockerfile的文件。vimDockerfile3.在Dockerfile中编写以下代码:FROMcentos:7#RUNsed-i's/deb.debian.org/mirrors.aliyun.com/g'/etc/apt/sources.list......
  • Dockers下php容器中安装redis扩展
    首先进入php容器dockerexec-it容器ID或名称查看php安装位置  whichphp查看php已安装扩展  php-m1、下载redis扩展包   redis扩展下载地址【https://pecl.php.net/package/redis 】下载相应版本的扩展2、解压扩展包   tar-zxvfredis-5.1.1.tg......
  • 使用docker快速安装mongodb.md
    1.拉取mongodb镜像dockerpullmongo2.创建文件夹mkdir-p/home/mongo/conf/mkdir-p/home/mongo/data/mkdir-p/home/mongo/logs/3.新增mongod.conf文件cd/home/mongo/conf&&vimongod.confmongod.conf文件内容:#数据库文件存储位置dbpath=/data/db#log文......
  • 使用docker快速安装mysql.md
    1.拉取mysql镜像dockerpullmysql:8.0.182.docker容器构建和运行mysqldockerrun--namemysql\ -p3306:3306\-eMYSQL_ROOT_PASSWORD=123456\ -v/home/mysql/data:/var/lib/mysql:rw\-v/home/mysql/mysql-files:/var/lib/mysql-files:rw\-v/home/......
  • Docker
    #1、yum包更新到最新yumupdate#2、安装需要的软件包,yum-util提供yum-config-manager功能,另外两个是devicemapper驱动依赖的yuminstall-yyum-utilsdevice-mapper-persistent-datalvm2#3、设置yum源yum-config-manager--add-repohttps://download.docker.com/linux......