从Alpine上的源代码安装node.js

时间:2020-10-07 12:06:34

标签: node.js docker alpine

我正在尝试从高山docker上的源安装节点。

wget https://nodejs.org/dist/v14.4.0/node-v14.4.0-linux-x64.tar.xz

tar -xvf node-v14.4.0-linux-x64.tar.xz 并且一旦我尝试运行它:

~/node-v14.4.0-linux-x64/bin # ./node 
sh: ./node: not found

尽管文件在这里,但我具有权限并且可以执行

~/node-v14.4.0-linux-x64/bin # ls -la
total 70376
drwxr-xr-x 2 root root     4096 Oct  7 11:53 .
drwxr-xr-x 6 1001 1001     4096 Oct  7 11:53 ..
-rwxr-xr-x 1 root root 72052312 Jun  2 14:33 node
lrwxrwxrwx 1 root root       38 Oct  7 11:53 npm -> ../lib/node_modules/npm/bin/npm-cli.js
lrwxrwxrwx 1 root root       38 Oct  7 11:53 npx -> ../lib/node_modules/npm/bin/npx-cli.js

当我在ubuntu上执行相同的操作时,它会起作用。

3 个答案:

答案 0 :(得分:4)

发生这种情况是因为alpine使用musl而不是glibc,并且从节点的网站分发的二进制文件是根据glibc构建的。

以下是您问题的一些解决方案,按照优先顺序(以及原因):

  1. 使用node's official image而不是尝试从高山基础映像进行安装:这是因为在拥有有效的节点映像之前,需要设置不同的依赖项和内容(证书, tls库等)。 这是最推荐的。

  2. 通过apk安装节点:可从alpine的官方软件包管理器apk获得,您可以通过简单运行apk add nodejs来进行安装。这里唯一的问题是存储库中可用的版本是LTS(从2020年10月7日起为12.18.4)。

  3. 在高山中为glibc安装/构建兼容层:完全不建议这样做,因为高山是在musl之上构建并运行{{1 }} 不是一个好习惯,它可能导致事情中断。即使安装了官方glibc也会导致问题:

使用libc6-compat运行节点:

libc6-compat

使用$ ./node Error relocating ./node: gnu_get_libc_version: symbol not found Error relocating ./node: __register_atfork: symbol not found Error relocating ./node: __strdup: symbol not found Error relocating ./node: setcontext: symbol not found Error relocating ./node: makecontext: symbol not found Error relocating ./node: backtrace: symbol not found Error relocating ./node: getcontext: symbol not found 的{​​{3}}建议的运行节点:

glibc

坚持节点的官方形象(解决方案1),然后一切都会好起来的:)

答案 1 :(得分:0)

其他二进制文件不适用于高山,需要手动构建,如此处https://github.com/nodejs/docker-node/blob/80ded64083b5c9be7853d9d3634a22a96e15e92d/14/alpine3.10/Dockerfile

答案 2 :(得分:0)

您需要下载一个针对 musl 构建的非官方版本

wget https://unofficial-builds.nodejs.org/download/release/v14.4.0/node-v14.4.0-linux-x64-musl.tar.xz

注意:非官方构建在 Node.js project 中链接,那么从我的角度来看并不代表安全问题。