简体   繁体   中英

Docker mongo - MongoError: command insert requires authentication

I'm trying to use mongodb for first time for a node.js app running on docker

This is my docker-compose file

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'

And this is my app.js file

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'
        });
    }
);

when I run docker-compose up I get the following error from mongo on the terminal and can't see the new database created neither the users table or the record added. How can I fix this?

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

Also if I docker-compose exec mongo bash I get this

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
> 

Call mongo with user/password

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

There you are

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

}

username/password are defined in docker-compose.yml

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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