运行docker-compose up
时,我找不到解决以下错误的解决方案:
module.js:598
return process.dlopen(module, path._makeLong(filename));
^
Error: /code/node_modules/bcrypt/lib/binding/bcrypt_lib.node: invalid ELF header
这是我最近的尝试docker-compose.yml
version: "2"
services:
app:
build: ./client
ports:
- "3000:3000"
links:
- auth
volumes:
- ./client:/code
auth:
build: ./auth-service
ports:
- "3002:3002"
links:
- db
volumes:
- ./auth-service:/code
db:
...
我的auth服务Dockerfile:
FROM node:7.7.1
EXPOSE 3002
WORKDIR /code
COPY package.json /code
RUN npm install
COPY . /code
CMD npm start
在尝试上述两个链接的每个解决方案之后,我重建容器并且它总是导致相同的错误。
另外值得注意的是,当我不使用docker时,本地服务运行良好。
如何让docker与bcrypt一起使用?
更新
我能够通过以下方式让它发挥作用:
docker ps
docker exec -t -i containerId /bin/bash
npm install bcrypt
这对于便携性来说并不理想
答案 0 :(得分:1)
几次都在苦苦挣扎,如果你遗憾地使用卷,那么“.dockerignore”解决方案就无法工作,因为它只与“复制”命令有关,而且只有在你构建容器时才会有效。
我认为唯一能让我觉得最有意义的解决方案就是只量化你需要的东西,它是什么意思 - 划分你的源代码和“配置”文件(比如package.json):
- src -- morecode -- morecode2 -- server.js - index.js - package.json - jslint.json - tsconfig.json - .env - .dockerignore - ... etc
并将卷只放在“src”文件夹中,这样你的构建也会快得多,加上你的节点模块将被构建并安装在正确的操作系统上,但是忘记将.dockerignore添加到node_modules到防止构建形式花费不必要的更长时间
请注意,这样做需要在每次添加新软件包时重新构建应用程序,但是如果使用npm最佳实践并将docker文件中的npm安装划分为高速缓存,则会更快
答案 1 :(得分:1)
我花了几个小时试图解决这个问题,最后我提出了以下解决方案。 我的撰写文件看起来像这样......
version: "3"
services:
server:
build:
context: ./server
volumes:
- ./server:/usr/src/app
- /usr/src/app/node_modules/
ports:
- 3050:3050
depends_on:
- db
command: ["nodemon", "./bin/www"]
第二个卷安装是重要的,因为它解决了本地node_module问题。
仅供参考我的dockerfile是这样的:
FROM node
RUN npm install -g nodemon
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app
RUN npm install
EXPOSE 3050
CMD ["nodemon", "./bin/www"]