2015-11-16 3 views
2

Я создал приложение Node с MongoDB, которое работает в Docker. Он работал нормально, пока не включил node.bcrypt.js. Это приводит к сбою узла с node-gyp и bcrypt.Ошибка установки Bcrypt в Docker

Приложение работает нормально и на Heroku.

Я попытался установить несколько предлагаемых пакетов, которые я нашел в Интернете, которые, как известно, были необходимы на основе сообщений об ошибках. Вот почему я добавил несколько дополнительных зависимостей, см. Ссылку node-gyp в файле docker ниже.

Теперь он получил там, где я больше не могу найти предложений, но он по-прежнему не работает. Я чувствую себя странно, что он работает как на местном, так и на Хеорку, но не на Докере, и поэтому мне чего-то не хватает.

Заранее спасибо.

Ошибка:

> [email protected] 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! [email protected] start: `node index.js` 
npm ERR! Exit status 1 

Это после того, как я добавил несколько установок в моей Dockerfile, увидеть линию после 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 

starth.sh -script просто устанавливает зависимости и начинает как MongoDB и сервер.

EDIT: repo говорит мне, чтобы проверить node-gyp dependencies, но я чувствую, что это была покрыта Dockerfile, показанной выше.

ответ

0

Я решил это, просто изменив bcrypt -библиотеку. This one был создан на основе аналогичной проблемы и предоставляет тот же API. Единственное отличие от библиотеки, упомянутой в моем вопросе:

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

В то время как в одном связанном в этом ответе:

bcrypt.hash(password, null, null, function(err, hash) { // Addd nulls 
    if(!err) callback(hash); 
}); 
+0

Этот пакет был недавно обновлен и основан на связанном пакете, представленном в этом ответе, - https://github.com/dcodeIO/bcrypt.js. Помня о том, что bcrypt обновляется наиболее последовательно по сравнению с любым из этих вариантов, поэтому, если ответ @ davidgatti работает, вы используете его над этими пакетами. – mtpultz

4

Это происходит сбой, потому что вам не хватает какой-то ESSENTIALS инструмента для целей составления данных Bcrypt. Bcrypt необходимо скомпилировать каждый раз, когда вы делаете npm install, чтобы создать версию для операционной системы, которая запущена, поскольку она написана на C.

Для тех, кто хотел бы использовать оригинальный Bcrypt, вы можете запустить следующий доккер команда:

docker run -t -i --rm -v $(pwd):/app -w /app node:slim sh -c 'apt-get update && apt-get install -y build-essential && apt-get install -y python && npm install' 

Перед тем, как сделать npm install нам нужно:

  • APT-получить обновления: убедитесь, что система управления пакетами знает были найти то, что мы хотим.
  • APT-получить установку -y наращивание существенно: будут установлены все инструменты, необходимые для компиляции кода C и более
  • APT-получить установку -y питона: добавить питона, так как это необходимо, и это не входит в комплект build-essential.

После того, как у нас есть все эти вещи, мы можем запустить npm install успешно :)

Надеется, что это помогает.

+1

Должен быть выбранный ответ, поэтому разработчики используют пакет bcrypt, который хорошо протестирован и наиболее активно разрабатывается. – mtpultz

+0

Я согласен, но вы знаете ... демократия: D –

+0

выйдите из [этого пользователя] (https://github.com). /shu8/SE-Answers_scripts/blob/master/sortStrictlyByVotes.user.js), чтобы избежать принятия ответного ответа на верху – Jay

Смежные вопросы