繁体   English   中英

Docker mongo - MongoError:命令插入需要身份验证

[英]Docker mongo - MongoError: command insert requires authentication

我正在尝试第一次使用 mongodb 用于在 docker 上运行的 node.js 应用程序

这是我的 docker-compose 文件

version: '3'

services:
    nodejs:
        container_name: sandbox_app
        build:
            context: .
            dockerfile: Dockerfile
        ports:
            - '3000:3000'
        volumes:
            - '.:/usr/src/app'
            - '/usr/src/app/node_modules'
        networks:
            - sandboxnet
        links:
            - mongo
    mongo:
        image: mongo
        container_name: sandbox_db
        # restart: always
        ports:
            - '27017:27017'
        environment:
            MONGO_INITDB_ROOT_USERNAME: root
            MONGO_INITDB_ROOT_PASSWORD: example
        networks:
            - sandboxnet
    mongo-express:
        image: mongo-express
        # restart: always
        ports:
            - 8081:8081
        environment:
            ME_CONFIG_MONGODB_ADMINUSERNAME: root
            ME_CONFIG_MONGODB_ADMINPASSWORD: example
        depends_on:
            - mongo
        networks:
            - sandboxnet

volumes:
    node_modules:
    web-root:
        driver: local
networks:
    sandboxnet:
        driver: 'bridge'

这是我的 app.js 文件

const mongodb = require('mongodb');
const MongoClient = mongodb.MongoClient;

const connectionUrl = 'mongodb://mongo:27017';
const databaseName = 'sandbox_db';

MongoClient.connect(
    connectionUrl,
    { useNewUrlParser: true },
    (error, client) => {
        if (error) {
            return console.log('Unable to connect to the database :(');
        }

        console.log('Connected succesfully to mongo :)');
        const db = client.db(databaseName);

        db.collection('users').insertOne({
            name: 'John Doe'
        });
    }
);

当我运行 docker-compose 时,我从终端上的 mongo 收到以下错误,并且看不到新数据库创建的用户表或添加的记录。 我怎样才能解决这个问题?

sandbox_app | Connected succesfully to mongo :)  // So skips the first console.log as there are no connection errors
sandbox_app | (node:80) UnhandledPromiseRejectionWarning: MongoError: command insert requires authentication

另外,如果我docker-compose exec mongo bash我明白了

docker-compose exec mongo bash
root@ashdja87a89s:/# mongo
MongoDB shell version v4.2.6
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("14aaa69b-8a7a-462b-ac5a-ff4ae0305d8b") }
MongoDB server version: 4.2.6
> show dbs
> 

使用用户/密码调用mongo

root@06e8e28840bb:/# mongo -u root -p example

你在这

> db.runCommand("connectionStatus")
{
"authInfo" : {
    "authenticatedUsers" : [
        {
            "user" : "root",
            "db" : "admin"
        }
    ],
    "authenticatedUserRoles" : [
        {
            "role" : "root",
            "db" : "admin"
        }
    ]
},
"ok" : 1

}

用户名/密码在docker-compose.yml中定义

mongo:
  image: mongo
  restart: always
  environment:
    MONGO_INITDB_ROOT_USERNAME: root            <-----
    MONGO_INITDB_ROOT_PASSWORD: example         <-----

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM