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 ?