我正在尝试在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上做同样的动作时,它起作用了。
4条答案
按热度按时间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运行节点:
使用
glibc
的this answer's建议运行节点:坚持node的官方形象(解决方案1),事情应该会很好:)
uelo1irk2#
你需要下载一个非官方的构建,它是针对musl构建的
注意:非官方的构建链接在Node.js project中,那么从我的Angular 来看并不代表安全问题。
xtupzzrd3#
我试着使用旧的存储库,但发现Sr. Libre的上面的答案是最容易使用的。
将以下内容添加到Dockerfile
从Docker容器中检查,您将看到正确的版本:
以下URL包含可使用的生成列表:
https://unofficial-builds.nodejs.org/download/release/
只要确保你选择的是带有
musl
后缀的。kwvwclae4#
其他二进制文件在alpine上不工作,需要手动构建,如这里的https://github.com/nodejs/docker-node/blob/80ded64083b5c9be7853d9d3634a22a96e15e92d/14/alpine3.10/Dockerfile