node.js - bcrypt 无法在带有 Windows 主机的 Linux 容器的 docker 中工作

标签 node.js docker docker-compose bcrypt

我正在为后端服务器创建一个 docker,但在创建卷之前一切都很好,所以我配置了 .yml docker-compose.yml

version: "3.7"

services:
  my-api: 
    container_name: backend
    build: ./
    command: npm start
    working_dir: /usr/src/my-api
    ports:
      - "3000:3000"
    volumes:
      - ./:/usr/src/my-api

这是我的Dockerfile

FROM node:10

WORKDIR /usr/src/my-api

COPY ./ ./

RUN npm install

CMD ["/bin/bash"]

考虑到我创建了我的 .dockerignore

node_modules

根据我的分析,问题在于创建时,直接复制模块,从而导致出现如下所示的问题。

Successfully built e1dfb81dd4c4
Successfully tagged facial-api_smart-brain-api:latest
Creating backend ... done
Attaching to backend
backend            |
backend            | > facial-api@1.0.0 start /usr/src/Facial-api
backend            | > nodemon server.js
backend            |
backend            | [nodemon] 1.18.4
backend            | [nodemon] to restart at any time, enter `rs`
backend            | [nodemon] watching: *.*
backend            | [nodemon] starting `node server.js`
backend            | internal/modules/cjs/loader.js:718
backend            |   return process.dlopen(module, path.toNamespacedPath(filename));
backend            |                  ^
backend            |
backend            | Error: /usr/src/Facial-api/node_modules/bcrypt/lib/binding/bcrypt_lib.node: invalid ELF header
backend            |     at Object.Module._extensions..node (internal/modules/cjs/loader.js:718:18)
backend            |     at Module.load (internal/modules/cjs/loader.js:599:32)
backend            |     at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
backend            |     at Function.Module._load (internal/modules/cjs/loader.js:530:3)
backend            |     at Module.require (internal/modules/cjs/loader.js:637:17)
backend            |     at require (internal/modules/cjs/helpers.js:20:18)
backend            |     at Object.<anonymous> (/usr/src/Facial-api/node_modules/bcrypt/bcrypt.js:6:16)
backend            |     at Module._compile (internal/modules/cjs/loader.js:689:30)
backend            |     at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
backend            |     at Module.load (internal/modules/cjs/loader.js:599:32)
backend            | [nodemon] app crashed - waiting for file changes before starting...

有什么想法、建议来解决这个问题吗?

最佳答案

有两种可能的情况,

  1. 如果您使用一个平台安装 Node 模块(例如(Windows/MacOSX)),并尝试使用相同的 Node 模块运行,而无需在其他平台(例如(Linux))中重新安装。如果在这种情况下,请尝试删除现有平台中的 Node 模块并“rpm install”相同。
  2. 如果您在一个平台上安装的 Node 版本与其他平台不同,Check this了解更多详情。

关于node.js - bcrypt 无法在带有 Windows 主机的 Linux 容器的 docker 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52307190/

相关文章:

angularjs - Express中如何获取URL参数?

node.js - 如何设置express中的默认 View 文件夹?

javascript - 使用 node.js 驱动程序强制执行特定的 MongoDB 模式

amazon-web-services - 如何使用IAM角色权限让Docker Swarm管理器从AWS ECR中提取图像?

docker - docker在Windows和Mac之间运行语法不同

docker - Mac 上的 Laradock 入门

mysql - 启用 “use gRPC for file sharing”后,macos上的Docker 2.4无法正确安装卷

linux - 安装 npm、nodejs - 使用 laravel gulp

macos - Docker 无法创建机器 - 'Error in driver during machine creation'

django - docker-compose在require.txt更改时重置Django数据库