node.js – 在alpine linux上失败的node-serialport

我正在使用node-serialport https://github.com/voodootikigod/node-serialport的一个小nodejs(nodejs v4.3)项目.我将它包装在一个docker镜像中.首先,我成功使用debian作为基本图像,但它的总大小约为600MB.然后我切换到alpine linux https://hub.docker.com/_/alpine/并实现了100MB的图像大小.但是,nodejs项目停止使用alpine作为基本图像.这是一些日志:

安装node-serialport日志:

> serialport@2.0.6 install /app/node_modules/serialport
> node-pre-gyp install --fallback-to-build

[serialport] Success: "/app/node_modules/serialport/build/Release/node-v46-linux-x64/serialport.node" is installed via remote
serialport@2.0.6 node_modules/serialport
├── bindings@1.2.1
├── async@0.9.0
├── sf@0.1.7
├── debug@2.2.0 (ms@0.7.1)
├── nan@2.0.9
└── optimist@0.6.1 (wordwrap@0.0.3,minimist@0.0.10)

当我尝试打开串口时出现错误

npm ERR! Linux 3.19.0-30-generic
npm ERR! argv "/usr/bin/node" "/usr/bin/npm" "start"
npm ERR! node v4.3.0
npm ERR! npm  v2.14.12
npm ERR! code ELIFECYCLE
npm ERR! app@1.2.0 start: `node ./bin/www`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the app@1.2.0 start script 'node ./bin/www'.
npm ERR! This is most likely a problem with the app package,npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node ./bin/www
npm ERR! You can get their info via:
npm ERR!     npm owner ls app
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /app/app/npm-debug.log
module.js:435
  return process.dlopen(module,path._makeLong(filename));
                 ^

Error: Error relocating /app/app/node_modules/serialport/build/Release/node-v46-linux-x64/serialport.node: __strcpy_chk: symbol not found
    at Error (native)
    at Object.Module._extensions..node (module.js:435:18)
    at Module.load (module.js:344:32)
    at Function.Module._load (module.js:301:12)
    at Module.require (module.js:354:17)
    at require (internal/module.js:12:17)
    at Object.

正如我所说,以debian为基本图像,它起作用.我认为这可能与alpine linux缺少node-serialport所依赖的事实有关.我在https://github.com/voodootikigod/node-serialport/issues/682创建了一个问题,但我不确定这是node-serialport还是alpine linux的问题.我读到了关于node-pre-gyp在alpine / busyBox上出错的问题.

最佳答案
https://github.com/voodootikigod/node-serialport/pull/710

Alpine是一个(非常)小的发行版,但它使用musl标准库而不是glibc(大多数其他Linux发行版使用),所以它需要编译.

# If you don't have node/npm already,add that first
sudo apk add --no-cache nodejs

# Add the necessary build and runtime dependencies
sudo apk add --no-cache make gcc g++ python linux-headers udev

# Then we can install serialport,forcing it to compile
npm install serialport --build-from-source=serialport

我测试了它.它解决了这个问题.

@H_404_32@

相关文章

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Li...
1、什么是docker?答:docker是开源的应用容器引擎;开发人员把他们的应用及依赖包打包发布到容器当中。...
1、什么是namespace? 答:名称空间,作用隔离容器 2、namespace隔离有那些? 答:ipc:共享内存、消息队...
1、Docker能在非Linux平台(Windows+MacOS)上运行吗? 答:可以 2 、如何将一台宿主机的docker环境...
环境要求: IP hostname 192.168.1.1 node1 项目规划: 容器网段:172.16.10.0/24 NGINX:172.16.10.10...
文档上传地址:https://files.cnblogs.com/files/lin-strive/07-docker%E8%B7%A8%E4%B8%BB%E6%9C%BA%E7...