在 alpine 上从源安装 node.js
Install node.js from source on alpine
我正在尝试在 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 执行相同的操作时,它起作用了。
其他二进制文件不能在 alpine 上运行,需要像这里一样手动构建它 https://github.com/nodejs/docker-node/blob/80ded64083b5c9be7853d9d3634a22a96e15e92d/14/alpine3.10/Dockerfile
发生这种情况是因为 alpine 使用 musl
而不是 glibc
,并且从节点网站分发的二进制文件是针对 glibc
.
构建的
以下是针对您的问题的一些解决方案,按优先顺序排列(以及原因):
使用 node's official image 而不是尝试从 alpine 基础映像安装它:那是因为在安装之前有不同的依赖项和设置工作节点映像(证书、tls 库等)。 这是最推荐的。
Installing node via apk
: node在alpine的官方包管理器apk中可用,你可以简单地安装它运行 apk add nodejs
。这里唯一的问题是存储库中可用的版本是 LTS(截至 2020 年 10 月 7 日为 12.18.4)。
Installing/building alpine 中 glibc
的兼容层: 根本不推荐这样做,因为 alpine 是建立在 musl
和 运行 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
运行 节点使用 this answer's 建议 glibc
:
$ ./node
./node: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
坚持使用 node 的官方图像(解决方案 1),一切都会好起来的:)
您需要下载针对 musl 构建的非官方版本
wget https://unofficial-builds.nodejs.org/download/release/v14.4.0/node-v14.4.0-linux-x64-musl.tar.xz
注意:非官方版本在 Node.js project 中链接,然后从我的角度来看并不代表安全问题。
我正在尝试在 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 执行相同的操作时,它起作用了。
其他二进制文件不能在 alpine 上运行,需要像这里一样手动构建它 https://github.com/nodejs/docker-node/blob/80ded64083b5c9be7853d9d3634a22a96e15e92d/14/alpine3.10/Dockerfile
发生这种情况是因为 alpine 使用 musl
而不是 glibc
,并且从节点网站分发的二进制文件是针对 glibc
.
以下是针对您的问题的一些解决方案,按优先顺序排列(以及原因):
使用 node's official image 而不是尝试从 alpine 基础映像安装它:那是因为在安装之前有不同的依赖项和设置工作节点映像(证书、tls 库等)。 这是最推荐的。
Installing node via
apk
: node在alpine的官方包管理器apk中可用,你可以简单地安装它运行apk add nodejs
。这里唯一的问题是存储库中可用的版本是 LTS(截至 2020 年 10 月 7 日为 12.18.4)。Installing/building alpine 中
glibc
的兼容层: 根本不推荐这样做,因为 alpine 是建立在musl
和 运行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
运行 节点使用 this answer's 建议 glibc
:
$ ./node
./node: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
坚持使用 node 的官方图像(解决方案 1),一切都会好起来的:)
您需要下载针对 musl 构建的非官方版本
wget https://unofficial-builds.nodejs.org/download/release/v14.4.0/node-v14.4.0-linux-x64-musl.tar.xz
注意:非官方版本在 Node.js project 中链接,然后从我的角度来看并不代表安全问题。