首页 > 解决方案 > 为什么 NPM 包会导致 docker-compose 失败(已经工作了一年多)?

问题描述

npm 包导致问题:https ://www.npmjs.com/package/node-teradata

我已经将这个确切的 dockerfile 作为我的 docker-compose 的一部分运行了 16 个月,没有任何问题,突然在尝试让我的 docker-compose build 命令运行时,我收到以下错误:

> java@0.12.1 install /usr/src/app/node_modules/java
> node-gyp rebuild

make: Entering directory `/usr/src/app/node_modules/java/build'
  CXX(target) Release/obj.target/nodejavabridge_bindings/src/java.o
  CXX(target) Release/obj.target/nodejavabridge_bindings/src/javaObject.o
  CXX(target) Release/obj.target/nodejavabridge_bindings/src/javaScope.o
  CXX(target) Release/obj.target/nodejavabridge_bindings/src/methodCallBaton.o
  CXX(target) Release/obj.target/nodejavabridge_bindings/src/nodeJavaBridge.o
  CXX(target) Release/obj.target/nodejavabridge_bindings/src/utils.o
../src/utils.cpp: In function '_jobject* v8ToJava(JNIEnv*, v8::Local<v8::Value>)':
../src/utils.cpp:343:110: error: no matching function for call to 'v8::String::Value::Value(v8::Isolate*, v8::Local<v8::String>)'
     v8::String::Value val(v8::Isolate::GetCurrent(), arg->ToString(Nan::GetCurrentContext()).ToLocalChecked());
                                                                                                              ^
../src/utils.cpp:343:110: note: candidate is:
In file included from ../src/utils.h:6:0,
                 from ../src/utils.cpp:1:
/root/.node-gyp/8.6.0/include/node/v8.h:2743:14: note: v8::String::Value::Value(v8::Local<v8::Value>)
     explicit Value(Local<v8::Value> obj);
              ^
/root/.node-gyp/8.6.0/include/node/v8.h:2743:14: note:   candidate expects 1 argument, 2 provided
make: Leaving directory `/usr/src/app/node_modules/java/build'
make: *** [Release/obj.target/nodejavabridge_bindings/src/utils.o] Error 1
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:258:23)
gyp ERR! stack     at emitTwo (events.js:125:13)
gyp ERR! stack     at ChildProcess.emit (events.js:213:7)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)
gyp ERR! System Linux 4.19.76-linuxkit
gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /usr/src/app/node_modules/java
gyp ERR! node -v v8.6.0
gyp ERR! node-gyp -v v3.6.2
gyp ERR! not ok
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.2.7 (node_modules/chokidar/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.13: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm WARN tslint@5.20.1 requires a peer of typescript@>=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev but none was installed.
npm WARN tsutils@2.29.0 requires a peer of typescript@>=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev but none was installed.

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! java@0.12.1 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the java@0.12.1 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2021-06-25T20_05_36_205Z-debug.log

我需要 Java,因为它是我用于 Teradata 数据库连接的 jdbc 连接器的依赖项。

我的dockerfile如下:

# Create image based on the official Node 6 image from the dockerhub
FROM jimador/docker-jdk-8-maven-node

# Create a directory where our app will be placed
RUN mkdir -p /usr/src/app

# Change directory so that our commands run inside this new directory
WORKDIR /usr/src/app

# Copy dependency definitions
COPY package.json /usr/src/app

RUN npm install --save ignore-warnings

# Install dependecies
RUN npm install

# Get all the code needed to run the app
COPY . /usr/src/app
# copy artifact build from the 'build environment'
COPY resultset.js /usr/src/app/node_modules/jdbc/lib

# Expose the port the app runs in
EXPOSE 4200

# Serve the app
CMD ["npm", "start"]

任何帮助将不胜感激。

标签: javanode.jslinuxdockermaven

解决方案


推荐阅读