Esso Esso - 4 years ago 185
Node.js Question

Bcrypt installation fails in Docker

I've created a Node-application with MongoDB that runs in Docker. It worked fine until I included node.bcrypt.js. This makes Node crash with

node-gyp
and
bcrypt
.

The app runs fine locally and on Heroku.

I tried to install a few suggested packages that I found online, that were known to be needed based on error messages. This is why I've added a few extra dependencies, see the
node-gyp
-related line in the dockerfile below.

Now it's gotten where I cannot find any more suggestions, but it still doens't work. I feel it's weird that it works both locally and on Heorku, but not on Docker, and therefore that it's something I'm missing.

Thanks in advance.

Error:

> crowdshelf-server@1.0.0 start /server
> node index.js

COPY Release/bcrypt_lib.node
make: Leaving directory `/server/node_modules/bcrypt/build'
module.js:338
throw err;
^
Error: Cannot find module './lib/topologies/server'
at Function.Module._resolveFilename (module.js:336:15)
at Function.Module._load (module.js:278:25)
at Module.require (module.js:365:17)
at require (module.js:384:17)
at Object.<anonymous> (/server/node_modules/mongodb/node_modules/mongodb-core/index.js:3:13)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Module.require (module.js:365:17)
at require (module.js:384:17)

npm ERR! Linux 3.13.0-58-generic
npm ERR! argv "/usr/bin/node" "/usr/bin/npm" "start"
npm ERR! node v0.12.7
npm ERR! npm v2.11.3
npm ERR! code ELIFECYCLE
npm ERR! crowdshelf-server@1.0.0 start: `node index.js`
npm ERR! Exit status 1


This is after I added a few installations to my Dockerfile, see the line after
node-gyp
. Dockerfile:

# Base Docker-image on Ubuntu
FROM ubuntu:latest

#install mongodb
#install git, curl, python and mongo
# node-gyp
RUN apt-get install -y build-essential make automake gcc g++ cpp libkrb5-dev libc6-dev man-db autoconf pkg-config

# Create the MongoDB data directory
RUN mkdir -p /data/db

# mongodb setup
# Install NodeJS
RUN curl --silent --location https://deb.nodesource.com/setup_0.12 | sudo bash -
RUN apt-get update && apt-get install -y nodejs
RUN npm install -g node-gyp

# Git-clone project
# expose ports
# Install dependencies and start server and database
CMD cd /server && sh start.sh


The
starth.sh
-script simply installs dependencies and starts both MongoDB and server.

EDIT:
The repo tells me to check out the node-gyp dependencies, but I feel that's been covered by the Dockerfile shown above.

Answer Source

I solved this by simply changing the bcrypt-library. This one was created based on a similar problem, and provides the same API. The only difference from the library mentioned in my question is:

bcrypt.hash(password, function(err, hash) {
    if(!err) callback(hash);
});

While in the one linked in this answer:

bcrypt.hash(password, null, null, function(err, hash) { // Addd nulls
    if(!err) callback(hash);
});
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download