Usar o usuário root como proprietário do banco de dados do seu aplicativo não é uma questão de segurança, pois ele terá a capacidade de controlar tudo na instância do mongodb.
IMHO uma abordagem melhor seria adicionar variáveis extras como as seguintes:
MONGO_APPLICATION_DATABASE
MONGO_APPLICATION_USERNAME
MONGO_APPLICATION_PASSWORD
Em seguida, adicione um script bash que criará o usuário e o atribuirá ao banco de dados usando variáveis de ambiente (você precisa montá-lo em docker-entrypoint-initdb.d):
# initmongo/setup.sh
mongo admin -u $MONGO_INITDB_ROOT_USERNAME -p $MONGO_INITDB_ROOT_PASSWORD --eval "db.getSiblingDB('$MONGO_APPLICATION_DATABASE').createUser({user: '$MONGO_APPLICATION_USERNAME', pwd: '$MONGO_APPLICATION_PASSWORD', roles: [{role: 'readWrite', db: '$MONGO_APPLICATION_DATABASE'}]});"
No docker-compose.yml, adicione um volume à sua lista atual de volumes
#docker-compose.yml
volumes:
- ".${MONGO_DATA_DIR}:${MONGO_DATA_DIR}"
- "./initmongo/:/docker-entrypoint-initdb.d/"
E finalmente remova esta variável MONGO_INITDB_DATABASE
pois não há necessidade disso
Para logar use o seguinte comando:
docker exec -it container_name mongo -u "$MONGO_APPLICATION_USERNAME" -p "$MONGO_APPLICATION_PASSWORD" --authenticationDatabase "$MONGO_APPLICATION_DATABASE" "$MONGO_APPLICATION_DATABASE"