This happens because alpine uses musl
instead of glibc
, and the binaries distributed from node's website are built against glibc
.
Here are a few solutions for your problem, in order of preference (and why):
Use node's official image instead of trying to install it from a alpine base image: that's because there are different dependencies and things to setup before having a working node image (certificates, tls libraries, etc). This is the most recommended.
Installing node via apk
: node is available at alpine's official package manager apk, and you can install it by simply running apk add nodejs
. The only problem here is that the version that's available in the repository is the LTS (12.18.4 as of 2020-10-07).
Installing/building a compability layer for glibc
in alpine: this is not recommended at all, since alpine is built over musl
and running glibc
is not a good practice and can lead to things breaking. Even installing the official libc6-compat
may lead to problems:
Running node using 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
Running node using this answer's suggestion for glibc
:
$ ./node
./node: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
Stick to node's official image (solution 1) and things should work out fine :)