【问题标题】:Docker compose up 'Exec format error' loading a libraryDocker 编写加载库的“Exec 格式错误”
【发布时间】:2022-01-26 20:59:08
【问题描述】:

我正在使用 docker-compose 开发一个多模块 docker nodejs 应用程序。模块所需的 natural 节点包存在问题。它似乎无法执行它。我尝试使用 RUN 命令即时重建它,但没有任何改变。 这是尝试运行 docker-compose up 时的日志:

web_1         | /app/web-server/node_modules/natural/lib/natural/classifiers/classifier.js:32
web_1         |     if (e.code !== 'MODULE_NOT_FOUND') throw e;
web_1         |                                        ^
web_1         |
web_1         | Error: Error loading shared library /app/web-server/node_modules/webworker-threads/build/Release/WebWorkerThreads.node: Exec format error
web_1         |     at Error (native)
web_1         |     at Object.Module._extensions..node (module.js:597:18)
web_1         |     at Module.load (module.js:487:32)
web_1         |     at tryModuleLoad (module.js:446:12)
web_1         |     at Function.Module._load (module.js:438:3)
web_1         |     at Module.require (module.js:497:17)
web_1         |     at require (internal/module.js:20:19)
web_1         |     at bindings (/app/web-server/node_modules/bindings/bindings.js:81:44)
web_1         |     at Object.<anonymous> (/app/web-server/node_modules/webworker-threads/index.js:1:105)
web_1         |     at Module._compile (module.js:570:32)
web_1         |     at Object.Module._extensions..js (module.js:579:10)
web_1         |     at Module.load (module.js:487:32)
web_1         |     at tryModuleLoad (module.js:446:12)
web_1         |     at Function.Module._load (module.js:438:3)
web_1         |     at Module.require (module.js:497:17)
web_1         |     at require (internal/module.js:20:19)

这是 package.json:

{
  "name": "realaffinities",
  "version": "1.0.0",
  "description": "",
  "main": "server/Server.js",
  "keywords": [],
  "author": "",
  "license": "GPL-3.0",
  "dependencies": {
    "async": "^2.5.0",
    "big-integer": "^1.6.23",
    "body-parser": "1.9.0",
    "express": "^4.15.3",
    "express-validator": "^3.2.1",
    "knex": "^0.13.0",
    "mysql": "^2.14.1",
    "natural": "^0.5.4",
    "twit": "^2.2.9",
    "url-exists": "^1.0.3",
    "nodemon": "^1.11.0"
  },
  "devDependencies": {
    "grunt": "^1.0.1",
    "grunt-express-server": "^0.5.3",
    "mocha": "^3.4.2",
    "supertest": "^3.0.0",
    "bcrypt": "1.0.2"
  },
  "scripts": {
    "test": "mocha web-server/test",
    "start": "node server/Server.js"
  }
}

我的码头文件:

FROM node:6.11-alpine

EXPOSE 3000
ENV NODE_ENV development
RUN mkdir /app
WORKDIR /app

# add package.json and run npm install before adding the rest of the files
# this way, you only run npm install when package.json changes
ADD /web-server/package.json /app/package.json

RUN apk add --no-cache make gcc g++ python

RUN npm install -g mocha
RUN npm install

我不知道这是这个特定节点包的问题还是我缺乏知识。如果我在没有 docker 的情况下在我的 mac 上本地运行相同的应用程序,它不会遇到这个问题。

【问题讨论】:

  • 你的 mac 和 dockerfile 中的节点版本是否相同?
  • 它们不一样,我将我的 dockerfile 更新到我在我的 mac (8.1.4) 上的相同版本并运行:docker-compose up --force-recreate --build 但问题还在。
  • 不是docker相关的问题。但是在docker内部运行失败的原因是容器中缺少一些包。
  • 我看不到缺少什么包。我该怎么办?
  • Here 与您的情况非常相似。

标签: node.js docker docker-compose


【解决方案1】:

有人在this issue 中报告了同样的问题,他的情况与你的情况相似。正如 cmets 中所讨论的,这对您有用,因此我也将其发布为答案:

听起来它正在尝试加载不是 为 linux 编译(在容器中)——也许你以前 在 OS X 上安装了扩展,它正在尝试加载该二进制文件。 如果您的意思是这是一个节点应用程序,请尝试删除 node_modules 并运行 再次 npm 安装

对您有用的修复:rm -rf node_modules

【讨论】:

    【解决方案2】:

    创建.dockerignore文件并添加/node_modules

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-03
      • 2022-12-30
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 2021-12-04
      • 2022-07-25
      • 1970-01-01
      相关资源
      最近更新 更多