在不从源代码构建的情况下在 Alpine 上固定 nodejs 版本
Pin nodejs version on Alpine without building from source
我正在尝试在 Docker 上安装 Kibana 6.7.0。基础继承 FROM behance/docker-nginx:8.5-alpine
Kibana 抛出一个错误,指出它需要节点版本 10.15.2
因为 alpine 默认提供来自 apk 仓库的 10.16.0
。
我试过像这样固定节点版本
curl -O https://nodejs.org/download/release/v10.15.2/node-v10.15.2-linux-x64.tar.gz
tar xzf node-v10.15.2-linux-x64.tar.gz
和
ENV PATH="/node-v10.15.2-linux-x64/bin:${PATH}"
当我做 node -v
我收到一条错误消息,指出节点 /node-v10.15.2-linux-x64/bin/node
未找到,即使它存在。
是否可以在不从源构建的情况下安装节点 10.15.2
?
不,你没有机会。
事实上虽然最新的alpine使用node10.16
,见this, but your alpine version is v3.9, which use node10.14
, see this。我不知道你是否可以使用 node10.14
让你工作,但你没有机会使用 apk add
安装 node10.15
版本,因为它们甚至没有存储在 apk 中央仓库中。
而且,从官方网站下载像 https://nodejs.org/download/release/v10.15.2/node-v10.15.2-linux-x64.tar.gz
这样的预构建包绝对不适合你。这是因为 alpine 使用 musl libc
而官方的 nodejs 二进制文件是用 glibc
构建的,这是 linux 世界中更常见的 libc。供你参考的类似讨论是 here.
因此,唯一的解决办法就是使用source来构建,可以参考this to add your things to your dockerfile. Additional, multi-stage builds在你的场景中是首选
我正在尝试在 Docker 上安装 Kibana 6.7.0。基础继承 FROM behance/docker-nginx:8.5-alpine
Kibana 抛出一个错误,指出它需要节点版本 10.15.2
因为 alpine 默认提供来自 apk 仓库的 10.16.0
。
我试过像这样固定节点版本
curl -O https://nodejs.org/download/release/v10.15.2/node-v10.15.2-linux-x64.tar.gz
tar xzf node-v10.15.2-linux-x64.tar.gz
和
ENV PATH="/node-v10.15.2-linux-x64/bin:${PATH}"
当我做 node -v
我收到一条错误消息,指出节点 /node-v10.15.2-linux-x64/bin/node
未找到,即使它存在。
是否可以在不从源构建的情况下安装节点 10.15.2
?
不,你没有机会。
事实上虽然最新的alpine使用node10.16
,见this, but your alpine version is v3.9, which use node10.14
, see this。我不知道你是否可以使用 node10.14
让你工作,但你没有机会使用 apk add
安装 node10.15
版本,因为它们甚至没有存储在 apk 中央仓库中。
而且,从官方网站下载像 https://nodejs.org/download/release/v10.15.2/node-v10.15.2-linux-x64.tar.gz
这样的预构建包绝对不适合你。这是因为 alpine 使用 musl libc
而官方的 nodejs 二进制文件是用 glibc
构建的,这是 linux 世界中更常见的 libc。供你参考的类似讨论是 here.
因此,唯一的解决办法就是使用source来构建,可以参考this to add your things to your dockerfile. Additional, multi-stage builds在你的场景中是首选