簡體   English   中英

在 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 使用musl而不是glibc ,並且從節點網站分發的二進制文件是針對glibc構建的。

以下是針對您的問題的一些解決方案,按優先順序排列(以及原因):

  1. 使用節點的官方圖像而不是嘗試從 alpine 基礎圖像安裝它:那是因為在擁有工作節點圖像(證書、tls 庫等)之前需要設置不同的依賴項和內容。 這是最推薦的。

  2. 通過apk安裝node: node在alpine的官方package manager apk中可用,運行apk add nodejs即可安裝。 這里唯一的問題是存儲庫中可用的版本是 LTS(截至 2020 年 10 月 7 日為 12.18.4)。

  3. 在 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

使用此答案glibc的建議運行節點:

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

堅持使用節點的官方形象(解決方案 1),事情應該會順利進行:)

您需要下載針對 musl 構建的非官方版本

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

注意:非官方構建鏈接在Node.js 項目中,然后從我的角度來看並不代表安全問題。

其他二進制文件在 alpine 上不起作用,需要像這里一樣手動構建它https://github.com/nodejs/docker-node/blob/80ded64083b5c9be7853d9d3634a22a96e15e92d/14/alpine3.10/Dockerfile

我嘗試使用舊存儲庫,但發現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后綴的那些。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM