docker-compose mongodb fresh instance not working

Viewed 554

Trying to bring docker-compose up with the following:

    version: '3.1'

    services:
      mongo:
        image: mongo
        container_name: mongo-db
        networks:
          - mongo
        restart: always
        environment:
          MONGO_INITDB_ROOT_USERNAME: ${MONGO_ROOT_USER}
          MONGO_INITDB_ROOT_PASSWORD: ${MONGO_ROOT_PASSWORD}
          MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE}
        ports:
          - 27017:27017
        volumes:
          - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro
      mongo-express:
        image: mongo-express:latest
        container_name: mongo-express
        restart: always
        networks:
          - mongo
        depends_on:
          - mongo
        ports:
          - 8081:8081
        environment:
          ME_CONFIG_MONGODB_SERVER: mongo
          ME_CONFIG_MONGODB_PORT: 27017
          ME_CONFIG_MONGODB_ADMINUSERNAME: ${MONGO_ROOT_USER}
          ME_CONFIG_MONGODB_ADMINPASSWORD: ${MONGO_ROOT_PASSWORD}

The entry point js file as below:

db.createUser(
    {
        user: "dba",
        pwd: "dba",
        roles: [
            {
                role: "readWrite",
                db: "mydb"
            }
        ]
    }
);

The variables are defined in .env file as below:

MONGO_ROOT_USER=root
MONGO_ROOT_PASSWORD=root
MONGO_INITDB_DATABASE=mydb
MONGOEXPRESS_LOGIN=dev
MONGOEXPRESS_PASSWORD=dev

When I login to mongo-express, I don't see the user or the db that is created by mongo-init.js Also, I can't login if I try to connect using:

docker exec -it mongo-db mongo --username dba

However, if I use the following I can connect but still don't see mydb when I run show dbs:

docker exec -it mongo-db mongo --username root

What's happening here?

Thanks in advance

1 Answers

I think you need to change the env to:

MONGO_INITDB_ROOT_USERNAME  
MONGO_INITDB_ROOT_PASSWORD

These variables, used in conjunction, create a new user and set that user's password. This user is created in the admin authentication database and given the role of root, which is a "superuser" role.

see the Docs

another note:

if you do not insert data with your JavaScript files, then no database is created.

MONGO_INITDB_DATABASE

This variable allows you to specify the name of a database to be used for creation scripts in /docker-entrypoint-initdb.d/*.js (see Initializing a fresh instance below). MongoDB is fundamentally designed for "create on first use", so if you do not insert data with your JavaScript files, then no database is created.

Related