【问题标题】:Node alpine image compilation error with mongodb-client-encryptionmongodb-client-encryption 的节点高山映像编译错误
【发布时间】:2020-12-19 06:30:32
【问题描述】:

我正在使用带有node:12.18.3-alpine 图像的 Docker。我在 package.json 中添加了mongodb-client-encryption,但是当我在图像中安装包时,它给了我错误。一切都适用于node:12.18.3 图像。除了python、g++和make之外,我还需要安装什么吗?我创建了最小的复制:

包.json:

{
  "name": "MONG-ENCRPT-TEST",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "dependencies": {
    "mongodb-client-encryption": "^1.1.0"
  }
}

这是我的 Dockerfile:

FROM node:12.18.3-alpine

WORKDIR /user/app

COPY package.json .
COPY yarn.lock .

RUN apk update && apk add python g++ make && rm -rf /var/cache/apk/*
RUN yarn

CMD echo ok

docker-compose.yml:

version: '3.8'
services:
  api-test-mongo:
    restart: unless-stopped
    build:
      context: ./
      dockerfile: ./Dockerfile
    command: echo ok

这是运行 docker-compose-up 后的错误:

[5/5] Building fresh packages...
error /user/app/node_modules/mongodb-client-encryption: Command failed.
Exit code: 1
Command: prebuild-install --tag-prefix node-v || node-gyp rebuild
Arguments:
Directory: /user/app/node_modules/mongodb-client-encryption
Output:
prebuild-install WARN install No prebuilt binaries found (target=12.18.3 runtime=node arch=x64 libc=musl platform=linux)
gyp info it worked if it ends with ok
gyp info using node-gyp@5.1.1
gyp info using node@12.18.3 | linux | x64
gyp info find Python using Python version 2.7.18 found at "/usr/bin/python"
gyp http GET https://unofficial-builds.nodejs.org/download/release/v12.18.3/node-v12.18.3-headers.tar.gz
gyp http 200 https://unofficial-builds.nodejs.org/download/release/v12.18.3/node-v12.18.3-headers.tar.gz
gyp http GET https://unofficial-builds.nodejs.org/download/release/v12.18.3/SHASUMS256.txt
gyp http 200 https://unofficial-builds.nodejs.org/download/release/v12.18.3/SHASUMS256.txt
gyp info spawn /usr/bin/python
gyp info spawn args [
gyp info spawn args   '/user/app/node_modules/node-gyp/gyp/gyp_main.py',
gyp info spawn args   'binding.gyp',
gyp info spawn args   '-f',
gyp info spawn args   'make',
gyp info spawn args   '-I',
gyp info spawn args   '/user/app/node_modules/mongodb-client-encryption/build/config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/user/app/node_modules/node-gyp/addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/root/.cache/node-gyp/12.18.3/include/node/common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=/root/.cache/node-gyp/12.18.3',
gyp info spawn args   '-Dnode_gyp_dir=/user/app/node_modules/node-gyp',
gyp info spawn args   '-Dnode_lib_file=/root/.cache/node-gyp/12.18.3/<(target_arch)/node.lib',
gyp info spawn args   '-Dmodule_root_dir=/user/app/node_modules/mongodb-client-encryption',
gyp info spawn args   '-Dnode_engine=v8',
gyp info spawn args   '--depth=.',
gyp info spawn args   '--no-parallel',
gyp info spawn args   '--generator-output',
gyp info spawn args   'build',
gyp info spawn args   '-Goutput_dir=.'
gyp info spawn args ]
gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
make: Entering directory '/user/app/node_modules/mongodb-client-encryption/build'
  CXX(target) Release/obj.target/mongocrypt/src/mongocrypt.o
In file included from ../src/mongocrypt.cc:1:
../src/mongocrypt.h:8:10: fatal error: mongocrypt/mongocrypt.h: No such file or directory
    8 | #include <mongocrypt/mongocrypt.h>
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make: *** [mongocrypt.target.mk:113: Release/obj.target/mongocrypt/src/mongocrypt.o] Error 1
make: Leaving directory '/user/app/node_modules/mongodb-client-encryption/build'
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/user/app/node_modules/node-gyp/lib/build.js:194:23)
gyp ERR! stack     at ChildProcess.emit (events.js:315:20)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:275:12)
gyp ERR! System Linux 4.19.76-linuxkit
gyp ERR! command "/usr/local/bin/node" "/user/app/node_modules/.bin/node-gyp" "rebuild"
gyp ERR! cwd /user/app/node_modules/mongodb-client-encryption
gyp ERR! node -v v12.18.3
gyp ERR! node-gyp -v v5.1.1
gyp ERR! not ok

【问题讨论】:

  • 你的 dockerfile 里的东西太多了。删除 lerna 以及与npmjs.com/package/mongodb-client-encryption 无关的所有其他内容,并首先使其正常工作。
  • 我不明白这会如何影响这个包的构建过程?我用干净的 repo 尝试了它,只有 mongodb-client-encryption,它也不适用于 alpine 图像。
  • 我们也不知道,所以为了避免疑问,用最少的代码来说明问题。
  • 我用最少的复制更新了我的问题,我只添加了 mongodb-client-encryption 包
  • 看起来 alpine 上的节点配置为“动态”扩展,这需要您在系统范围内安装 libmongocrypt。

标签: python node.js linux mongodb docker


【解决方案1】:

我所做的不是修改我的NODE 版本或mongo-client-encryption 包。

使用 NODE v14 时不会出错。 对我来说,对 NODE 16 的更新破坏了 Linux 和 Mac 上的东西。

我做了什么来修复它:从我的 pakcage.json 中删除 mongo-client-encryption 并将其添加为 webpack 配置的外部并让 webpack 处理它。

// webpack.config.js
module.exports = {
  ...
  externals: ["mongodb-client-encryption"]
}

与 package.json 一起使用:

"dependencies": {
  ...
  "mongoose": "5.11.15",
  "mongoose-auto-increment": "5.0.1",
},

参考资料:

【讨论】:

    【解决方案2】:

    在 package.json 中 "mongodb-client-encryption": "1.2.1" 时,Docker 构建成功

    更高版本的NODEJS,尝试使用最新版本的mongodb-client-encryption

    【讨论】:

    • 尝试使用节点 docker imageFROM node:14.17.0-alpine3.12 和 v 1.2.6..
    • 是的,这将适用于 NODE 14。完全同意这一点。但是,如果您使用 NODE 16,这将不起作用。
    • 目前我正在尝试使用 LTS 版本,我将尝试使用 NODE 16。
    猜你喜欢
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    • 1970-01-01
    • 2017-12-20
    相关资源
    最近更新 更多