在 Docker Busybox 上运行 Node.js

在 Docker Busybox 上运行 Node.js

我正在尝试构建一个最小node.js docker映像。我已经node在我的Debian系统上编译了,它安装/运行良好。如果我错了,请纠正我,据我所知,复制二进制文件及其依赖项应该足够了,node.js因此它应该可以在其他系统上运行。

目前我已经编写了以下脚本:

#! /bin/bash
# Build Node as the first step in '/opt/node'.
# Then use this script to install Node to the
# custom directory '/opt/node_tmp' and package
# it to *.tar.gz archive.

set -e

BLD_PATH='/opt/node'
TMP_PATH='/opt/node_tmp'

mkdir -p "${TMP_PATH}"

pushd "${BLD_PATH}"

command python tools/install.py install '' "${TMP_PATH}"

popd

VERSION=$("${TMP_PATH}/bin/node" --version)

# Package Node
tar -Pczf "node_${VERSION}.tar.gz" -C "${TMP_PATH}" .

DEPS=$(ldd "${TMP_PATH}/bin/node" | awk '{for(x=1;x<=NR;x++){if($x~"/"){print $x}}}')

# Package Node dependencies
tar -Pvczf "node_${VERSION}_depends.tar.gz" ${DEPS}

du -sh "node_${VERSION}.tar.gz"
du -sh "node_${VERSION}_depends.tar.gz"

echo "About to delete '${TMP_PATH}', continue?"
select yn in "Yes" "No"; do
  case $yn in
    ([Yy]*)
      rm -vrf "${TMP_PATH}"
      break
    ;;
    (*) break ;;
  esac
done

还有以下内容Dockerfile

FROM busybox:latest
MAINTAINER narunask

ARG img="Node"
ARG version="v5.12.0"

## Install Node
ADD node_${version}.tar.gz /usr/local/
ADD node_${version}_depends.tar.gz /

我的Docker会话如下所示:

/ # echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
/ # ls -l /usr/local/bin
total 18864
-rwxr-xr-x    1 root     root      19313296 Mar 22 15:18 node
lrwxrwxrwx    1 root     root            38 Mar 24 16:35 npm -> ../lib/node_modules/npm/bin/npm-cli.js
/ # /usr/local/bin/node --version
/bin/sh: /usr/local/bin/node: not found
/ # node --version
/bin/sh: node: not found

希望得到一些帮助。

答案1

如果我错了,请纠正我,根据我的理解,复制 node.js 二进制文件及其依赖项就足够了,因此它应该可以在其他系统上运行。

不,您需要为要在其上运行 Node 的特定系统构建 Node 及其依赖项。将二进制文件从 Debian 移动到精简的 Busybox 映像不太可能成功,除非您将一半的 Debian 系统库一起移动,而且即使这样,也只有其他所有内容(如内核、libc 等)都兼容时才行。

查看 Node 的 Docker 文件:

寻找基于 Alpine 的版本,因为它们是最轻量的。

相关内容