MongoDB 在 docker 下开启权限验证并用 mongoose 连接

本人喜欢直接用 docker-compose.yml 来部署 docker 项目,虽然对于集群可能还不够看,但是单机使用已经绰绰有余了。

# docker-compose.yml
version: "3"

services:
    # 这里配置自己的项目
    server:
        build: .
        restart: always
        ports:
            - "8080:8080"
        environment:
            NODE_ENV: production
            MONGO_URL: "mongodb://mongo:27017/"
        depends_on: # 一定要先启动 MongoDB
            - mongo

    mongo:
        image: mongo:4.2.6
        restart: always
        volumes:
            - mongo-data:/data/db
        environment:
            MONGO_INITDB_ROOT_USERNAME: "admin" #设置root用户
            MONGO_INITDB_ROOT_PASSWORD: "123456"
volumes:
    mongo-data:

接下来就到了连接数据库了,这里采用 mongoose 这个库来连接

import mongoose from 'mongoose'
const url = process.env.MONGO_URL
const db = mongoose.createConnection(url, {
    auth: {
        user: process.env.DB_USER || 'admin',
        password: process.env.DB_PASSWORD || '123456',
    },
    dbName: 'docker',
    useNewUrlParser: true,
    useUnifiedTopology: true,
    useCreateIndex: true,
    useFindAndModify: false,
})
db.on('error', console.error.bind(console, '连接错误 :'))
db.once('open', () => {
    console.log('mongoose 已连接')
})

当使用 root 用户连接的时候,一定要直接连到根目录,例如 mongodb://mongo:27017/,末尾是不带 dbName 的。如果是 dbName 的 User,则要连到指定 db 才行。