node.js - Docker 与 Node bcrypt — 无效的 ELF header

标签 node.js docker docker-compose

我已经尝试了 this post 中的所有解决方案和 this post

我没有找到解决方案来消除运行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:
    ...

还有我的身份验证服务 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 一起使用?

更新

我通过执行以下操作使其正常工作:

  1. 查找容器的ID:docker ps
  2. 访问容器:docker exec -t -i containerId/bin/bash
  3. 安装 bcrypt:npm 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"]

第二个卷挂载非常重要,因为它解决了本地 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"]

关于node.js - Docker 与 Node bcrypt — 无效的 ELF header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42817446/

相关文章:

docker - 有没有办法从标准输入提供 docker-compose 环境文件?

spring - 如何使用命令行启动特定的Spring Batch作业

node.js - 如何从 POST 正文获取 wav 文件并使用 Node JS/Express 上传

python - Docker 容器无法连接到本地主机上运行的服务器

node.js - 如何使用相对路径在 Webpack 中使用 SCSS (SASS) 加载 font-awesome?

docker - 使用 Docker Compose 运行时的端口发布

node.js - 需要帮助使用 Kubernetes 将 Node 连接到 Neo4j 数据库

Docker 容器未开始提供 "OCI runtime create failed"

node.js - 如何执行 webpack --watch 和另一个脚本?

node.js - req.params.userId 未找到(路径设置为/:userId) Node. js