Docker中的Bcrypt安装失败

时间:2015-11-16 20:01:36

标签: node.js docker bcrypt

我使用在Docker中运行的MongoDB创建了一个Node-application。它工作正常,直到我加入node.bcrypt.js。这会导致Node与node-gypbcrypt崩溃。

该应用程序在本地和Heroku上运行良好。

我尝试安装一些我在网上找到的建议包,根据错误消息已知需要这些包。这就是为什么我添加了一些额外的依赖项,请参阅下面的dockerfile中的node-gyp相关行。

现在它已经到了我找不到更多建议的地方,但它仍然无法正常工作。我觉得它在本地和Heorku上工作都很奇怪,但在Docker上却没有,因此它是我缺少的东西。

提前致谢。

错误:

> 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

这是在我向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 - 脚本只是安装依赖项并启动MongoDB和服务器。

修改 repo告诉我查看node-gyp dependencies,但我觉得上面显示的Dockerfile已经涵盖了这些内容。

2 个答案:

答案 0 :(得分:9)

它正在崩溃,因为您缺少一些用于Bcrypt编译目的的必需工具。每次执行npm install时,都需要编译Bcrypt,以便为运行的操作系统创建一个版本,因为它是用C语言编写的。

对于那些想要使用原始Bcrypt的人,可以运行以下docker命令:

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-get update :确保软件包管理系统知道要找到我们想要的内容。
  • apt-get install -y build-essential :将安装编译C代码所需的所有工具等等
  • apt-get install -y python :我们添加了python,因为它是必需的,并且它不包含在build-essential包中。

一旦我们掌握了所有这些内容,我们就可以成功运行npm install:)

希望这有帮助。

答案 1 :(得分: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);
});