我的节点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 https://deb.nodesource.com/setup_0.12 | 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上正确设置,但节点实例抛出此错误:
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.
我到处搜索,似乎无法找到有效的解决方案.我尝试使用常规安装URL:https://deb.nodesource.com/setup,专门安装python2.7,并使用ubuntu:15.04图像.
我已经读过,当人们在OS X(我的操作系统)上构建linux env后尝试使用bcrypt时会发生这种情况,但我认为这不会是问题因为我正在使用docker构建所有东西boot2docker.
最佳答案
确保您没有复制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
编辑:Github上的官方NodeJS Docker启动器映像项目接受了我的READ README请求,该请求指示显式忽略node_modules.