Sco*_*ott 5 node.js docker docker-compose
我没有找到解决运行时出现以下错误的解决方案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
Run Code Online (Sandbox Code Playgroud)
这是我最近的尝试 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:
...
Run Code Online (Sandbox Code Playgroud)
我的身份验证服务 Dockerfile:
FROM node:7.7.1
EXPOSE 3002
WORKDIR /code
COPY package.json /code
RUN npm install
COPY . /code
CMD npm start
Run Code Online (Sandbox Code Playgroud)
在尝试了上述两个链接中的每个解决方案后,我重建了容器,但总是导致相同的错误。
同样值得注意的是,当我不使用 docker 时,该服务在本地运行良好。
如何让 docker 与 bcrypt 一起工作?
更新
我能够通过执行以下操作来使其工作:
docker psdocker exec -t -i containerId /bin/bashnpm install bcrypt这对于便携性来说并不理想
我花了几个小时试图解决这个问题,最后我想出了以下解决方案。我的撰写文件看起来像这样......
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"]
Run Code Online (Sandbox Code Playgroud)
第二个卷挂载很重要,因为它解决了本地 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"]
Run Code Online (Sandbox Code Playgroud)
曾多次遇到这个问题,如果您遗憾地使用卷,“.dockerignore”解决方案将无法工作,因为它仅与“复制”命令相关,并且仅在构建容器时相关。
我发现的唯一我认为最有意义的解决方案是仅存储您需要的内容,这意味着什么 - 划分源代码和“配置”文件(例如 package.json):
- 源代码 -- 更多代码 -- 更多代码2 -- 服务器.js - 索引.js - 包.json - jslint.json - tsconfig.json -.env - .dockerignore - ... ETC
并将卷仅放在“src”文件夹中,这样您的构建也会更快,而且您的节点模块将在正确的操作系统上构建和安装,不要忘记将 .dockerignore 添加到 node_modules 以防止构建形成花费不必要的较长时间
请注意,这样做将需要在每次添加新包时重新构建应用程序,但如果您使用 npm 最佳实践并将 npm 安装划分到要缓存的 docker 文件中,速度会更快
| 归档时间: |
|
| 查看次数: |
4972 次 |
| 最近记录: |