MongoDB docker -- init script cannot create user

Viewed 370

In my project I use mongodb docker image. I want it to during startup create a user for my application. Although I've been following tutorials from SO I wasn't able to succeed.

My mongo dockerfile:

FROM mongo:4.2.0-bionic
COPY mongo-init.js /docker-entrypoint-initdb.d/

My docker compose:

version: '3.7'

services:

  mongo:
    build:
      context: mongo
      dockerfile: Dockerfile
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: admin
      MONGO_INITDB_DATABASE: mydatabase
      MONGO_APP_USERNAME: user
      MONGO_APP_PASSWORD: pwd
    ports:
      - "27017:27017"
    healthcheck:
      test: ["CMD", "echo", "'db.runCommand(\"ping\").ok'", "mongo","localhost:27017/test","--quiet","1"]
      interval: 10s
      timeout: 10s
      retries: 5
      start_period: 40s

my mongo-init.js file:

function getEnvValue(envVar) {
    let ret = run("sh", "-c", `printenv ${envVar} >/tmp/${envVar}.txt`);
    if (ret != 0) throw Error(`Environment ${envVar} is not set. Aborting...`)
    return cat(`/tmp/${envVar}.txt`)
}

const appUsername = getEnvValue("MONGO_APP_USERNAME");
const appPassword = getEnvValue("MONGO_APP_PASSWORD");

let error = true

let res = [
    db.createUser(
        {
            user: appUsername,
            pwd: appPassword,
            roles: ["readWrite"]
        },
        {
            w: "majority", wtimeout: 5000
        }
    )
]

printjson(res)
print("THIS IS TEST !!!")
if (error) {
    print('Error, exiting')
    quit(1)
}

I deploy it using:

docker-compose -f docker-compose.yml build --force-rm mongo
docker-compose -f docker-compose.yml up mongo

After it starts MONGO_INITDB_DATABASE database is not created, my user is also not created. I tried to find some logs, at least the debug message I put in the init script but it wasn't there.

How to solve it ?

0 Answers
Related