![](/img/trans.png)
[英]Unattended install of node.js and npm, but without building it from source
[英]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
構建的。
以下是針對您的問題的一些解決方案,按優先順序排列(以及原因):
使用節點的官方圖像而不是嘗試從 alpine 基礎圖像安裝它:那是因為在擁有工作節點圖像(證書、tls 庫等)之前需要設置不同的依賴項和內容。 這是最推薦的。
通過apk
安裝node: node在alpine的官方package manager apk中可用,運行apk add nodejs
即可安裝。 這里唯一的問題是存儲庫中可用的版本是 LTS(截至 2020 年 10 月 7 日為 12.18.4)。
在 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 包含您可以使用的構建列表:
只要確保你選擇帶有musl
后綴的那些。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.