How to enable authentication on MongoDB through Docker?

后端 未结 10 2126
没有蜡笔的小新
没有蜡笔的小新 2020-11-29 18:53

I want to spin-up a docker for mongodb:latest but allow only certain user(s) to access certain db(s) (i.e. enable --auth). No one else should acces

10条回答
  •  粉色の甜心
    2020-11-29 19:14

    I have hard time when trying to

    • Create other db than admin
    • Add new users and enable authentication to the db above

    So I made 2020 answer here

    My directory looks like this

    ├── docker-compose.yml
    └── mongo-entrypoint
        └── entrypoint.js
    

    My docker-compose.yml looks like this

    version: '3.4'
    services:
      mongo-container:
        # If you need to connect to your db from outside this container 
        network_mode: host
        image: mongo:4.2
        environment:
            - MONGO_INITDB_ROOT_USERNAME=admin
            - MONGO_INITDB_ROOT_PASSWORD=pass
        ports:
          - "27017:27017"
        volumes:
          - "$PWD/mongo-entrypoint/:/docker-entrypoint-initdb.d/"
        command: mongod
    

    Please change admin and pass with your need.

    Inside mongo-entrypoint, I have entrypoint.js file with this content:

    var db = connect("mongodb://admin:pass@localhost:27017/admin");
    
    db = db.getSiblingDB('new_db'); // we can not use "use" statement here to switch db
    
    db.createUser(
        {
            user: "user",
            pwd: "pass",
            roles: [ { role: "readWrite", db: "new_db"} ],
            passwordDigestor: "server",
        }
    )
    

    Here again you need to change admin:pass to your root mongo credentials in your docker-compose.yml that you stated before. In additional you need to change new_db, user, pass to your new database name and credentials that you need.

    Now you can:

    docker-compose up -d
    

    And connect to this db from localhost, please note that I already have mongo cli, you can install it or you can exec to the container above to use mongo command:

    mongo new_db -u user -p pass
    

    Or you can connect from other computer

    mongo host:27017/new_db -u user -p pass
    

    My git repository: https://github.com/sexydevops/docker-compose-mongo

    Hope it can help someone, I lost my afternoon for this ;)

提交回复
热议问题