我正在尝试从高山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上执行相同的操作时,它会起作用。
答案 0 :(得分:4)
发生这种情况是因为alpine使用musl
而不是glibc
,并且从节点的网站分发的二进制文件是根据glibc
构建的。
以下是您问题的一些解决方案,按照优先顺序(以及原因):
使用node's official image而不是尝试从高山基础映像进行安装:这是因为在拥有有效的节点映像之前,需要设置不同的依赖项和内容(证书, tls库等)。 这是最推荐的。
通过apk
安装节点:可从alpine的官方软件包管理器apk获得,您可以通过简单运行apk add nodejs
来进行安装。这里唯一的问题是存储库中可用的版本是LTS(从2020年10月7日起为12.18.4)。
在高山中为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 中链接,那么从我的角度来看并不代表安全问题。