Bcrypt: Headlock无效 ELF 从 Docker 和 Sails.JS

我的节点
Dockfile

:


# Set the base image to ubuntu
FROM ubuntu

# Define working directory
ADD . /src
WORKDIR /src

# Install Node.js & other dependencies
RUN apt-get update && \
apt-get -y install curl && \
apt-get -y install sudo && \
curl -sL [url=https://deb.nodesource.com/setup_0.12]https://deb.nodesource.com/setup_0.12[/url] | sudo bash - && \
apt-get -y install python build-essential nodejs

RUN npm install -g node-gyp && \
node-gyp clean && \
npm cache clean

RUN node -v

# Install nodemon
RUN npm install -g nodemon


ADD package.json /src/package.json
RUN cd /src && npm install


# Expose port
EXPOSE 8080

# Run app using nodemon
CMD npm install; nodemon /src/app.js


这是我的
docker-compose.yml

:


nginx:
build: ./nginx
links:
- node1:node1
- node2:node2
- node3:node3
ports:
- "80:80"
redis:
image: redis
ports:
- "6379"
node1:
build: ./node
links:
- redis
ports:
- "8080"
node2:
build: ./node
links:
- redis
ports:
- "8080"
node3:
build: ./node
links:
- redis
ports:
- "8080"



docker-compose build

它成功地工作我。 Redis/Nginx 正确配置
docker-compose up

, 但节点的副本给出了此错误:


node2_1 | /src/node_modules/bcrypt/node_modules/bindings/bindings.js:83
node2_1 | throw e
node2_1 | ^
node2_1 | Error: /src/node_modules/bcrypt/build/Release/bcrypt_lib.node: invalid ELF header
node2_1 | at Error /native/
node2_1 | at Module.load /module.js:355:32/
node2_1 | at Function.Module._load /module.js:310:12/
node2_1 | at Module.require /module.js:365:17/
node2_1 | at require /module.js:384:17/
node2_1 | at bindings //src/node_modules/bcrypt/node_modules/bindings/bindings.js:76:44/
node2_1 | at Object.<anonymous> //src/node_modules/bcrypt/bcrypt.js:3:35/
node2_1 | at Module._compile /module.js:460:26/
node2_1 | at Object.Module._extensions..js /module.js:478:10/
node2_1 | at Module.load /module.js:355:32/
node2_1 | at Function.Module._load /module.js:310:12/
node2_1 | at Module.require /module.js:365:17/
node2_1 | at require /module.js:384:17/
node2_1 | at Object.<anonymous> //src/api/models/User.js:10:14/
node2_1 | at Module._compile /module.js:460:26/
node2_1 | at Object.Module._extensions..js /module.js:478:10/
node2_1 | 19 Aug 20:21:11 - [nodemon] app crashed - waiting for file changes before starting...


我正在寻找到处寻找,似乎我找不到工作的解决方案。 我试图使用通常的设置 url:
[url=https://deb.nodesource.com/setup]https://deb.nodesource.com/setup[/url]

, 特别是安装
python2.7

和使用图像
ubuntu:15.04

.

当人们试图使用时,我读到这发生了这一切 bcrypt 在 linux env 建成后 OS X /my OS/, 但我认为这不会是一个问题,因为我正在建立一切 docker 和 boot2docker.
</anonymous></anonymous>
已邀请:

小姐请别说爱

赞同来自:

确保您不复制文件夹
node_modules

. 使用官方图像时,我收到了此错误 nodejs "onbuild", 这会复制一切......

现在我用:

.dockerignore


node_modules


dockerfile


FROM node:6.4.0

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY package.json /usr/src/app/
RUN npm install
COPY . /usr/src/app

CMD [ "npm", "start" ]

EXPOSE 6969


Edit

: 官方项目 NodeJS Docker starter image 在 Github 接受了我的要求 pull 为了 ther README, 该规定清楚地忽略了 node_modules.

知食

赞同来自:

我经历了同样的事情,虽然我用了快车,而不是帆。 我在这里尝试过所有优惠,但不成功。 诀窍是改变模块 npm bcrypt 在 bcryptjs:


npm uninstal bcrypt
npm install bcryptjs --save


然后改变你的要求


var bcrypt = require/'bcryptjs'/;


现在它完美无瑕。

裸奔

赞同来自:

我有我的包配置
"bcrypt":"^0.8.0"

, 当我得到的时候
^

并改变了它
"bcrypt":"0.8.0"

, 我能够让一切都在工作。

问题是他试图运行 bcrypt 0.8.5, 而这出于某种原因导致问题。

知食

赞同来自:

只是为了增加一个新的可能原因。 我试图创建我的形象 docker 适用于应用程序 nodejs, 但我有一个错误
invalid ELF header

. 在我的情况下
我通过添加解决了这个问题
node_modules/*

从文件。 .dockerignore.

快网

赞同来自:

我发现整个本地目录的例外
node_modules

不允许您安装包 npm 并强迫你的容器 docker 在飞行中跟踪容器中的这些变化。 我必须每次重建你的容器。 要避免此操作,请仅指定目录 bcrypt 在集装箱汤姆和允许 docker 安装或删除其他包时,跟踪更改:


volumes: 
- .:/app
- /app/node_modules/bcrypt/

莫问

赞同来自:

有一种简单的方法让我解决这个问题,我认为它可以帮助您 Docker, 只需添加到您的启动说明 docker 文件本指令

1. 进行删除


npm uninstall bcrypt


2. - 安装 bcrypt 再次


npm i bcrypt


编辑文件的这一部分。 docker, 添加字符串


ADD package.json /src/package.json
RUN cd /src && npm install


#Solve the problem reinstaling bcrypt
RUN npm uninstall bcrypt
RUN npm i bcrypt


# Expose port
EXPOSE 8080


由于安装时,出现错误发生 bcypt npm 为计算机和操作系统设置推荐版本,但是当您在另一台计算机上时,它就无法正常工作。

小姐请别说爱

赞同来自:

主要的 = > Docker Context. Docker context 将所有根文件夹复制到目标容器的工作目录中。

所以你必须添加文件 .dockerignore 并添加这些记录 /与您想要忽略的任何其他文件/

文件夹 node_modules

npm-debug.log

现在,当你构建容器时,它将根据一切建立 OS 容器。

要回复问题请先登录注册