docker 在alpine上安装node.js官方二进制文件

pdsfdshx  于 2023-06-22  发布在  Docker
关注(0)|答案(4)|浏览(167)

我正在尝试在alpine docker上安装node官方二进制文件。
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上做同样的动作时,它起作用了。

jyztefdp

jyztefdp1#

这是因为alpine使用了musl而不是glibc,而node网站上发布的二进制文件是基于glibc构建的。
以下是一些解决您的问题的方法,按偏好(以及原因)排序:
1.使用node's official image,而不是尝试从alpine基础镜像安装:这是因为在有一个工作节点映像之前,有不同的依赖项和事情要设置(证书、TLS库等)。* 这是最值得推荐的 *
1.**通过apk安装node:**node可在alpine官方包管理器apk中获取,只需运行apk add nodejs即可安装。这里唯一的问题是存储库中可用的版本是LTS(截至2020-10-07的12.18.4)。
1.**在alpine中为glibc安装/构建兼容层:**这根本不推荐,因为alpine是在musl上构建的,运行glibc * 不是一个好的做法,可能会导致中断 *。即使安装官方的libc6-compat也可能导致问题:
使用libc 6-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

使用glibcthis answer's建议运行节点:

$ ./node
./node: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

坚持node的官方形象(解决方案1),事情应该会很好:)

uelo1irk

uelo1irk2#

你需要下载一个非官方的构建,它是针对musl构建的

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

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

xtupzzrd

xtupzzrd3#

我试着使用旧的存储库,但发现Sr. Libre的上面的答案是最容易使用的。
将以下内容添加到Dockerfile

RUN wget https://unofficial-builds.nodejs.org/download/release/v12.22.3/node-v12.22.3-linux-x64-musl.tar.gz
RUN tar -xvf node-v12.22.3-linux-x64-musl.tar.gz
RUN rm node-v12.22.3-linux-x64-musl.tar.gz

RUN ln -s /var/www/node-v12.22.3-linux-x64-musl/bin/node /usr/bin/node
RUN ln -s /var/www/node-v12.22.3-linux-x64-musl/bin/npm /usr/bin/npm

从Docker容器中检查,您将看到正确的版本:

bash-5.1# node --version
v12.22.3
bash-5.1# npm -v
6.14.13
bash-5.1#

以下URL包含可使用的生成列表:
https://unofficial-builds.nodejs.org/download/release/
只要确保你选择的是带有musl后缀的。

相关问题