找不到Docker nodejs

jam*_*rth 3 node.js docker

当我docker build -t example .在下面运行我得到一个错误

FROM ruby:2.1
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
ENV NVM_DIR /usr/local/nvm
ENV NODE_VERSION 4.4.2

RUN curl https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash \
  && source $NVM_DIR/nvm.sh \
  && nvm install $NODE_VERSION \
  && nvm alias default $NODE_VERSION \
  && nvm use default


ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules
ENV PATH      $NVM_DIR/v$NODE_VERSION/bin:$PATH

RUN node -v
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

步骤9:运行节点-v --->在6e3fac36d2fc/bin/sh中运行:找不到命令:命令'/ bin/sh -c node -v'返回非零代码:127

无法理解为什么路径中找不到节点.我也试过执行nvm.sh文件,但它没有效果.

L0j*_*j1k 6

节点版本管理器是用于在开发机器上切换Node.js版本的优秀应用程序,但是Docker需要一种特定类型的图像/容器设计,这种设计既短暂又简单,只需支持"基本要素".微服务的最佳实践.Docker只是运行进程的一种奇特方式,而不是一个完整的VM.最后一句话对我如何思考Docker有很大帮助.所以在这里,您可以通过创建不同版本的图像来使自己更容易,而不是在其中创建一个包含许多版本的Node.js的容器.这样,您可以引用要在docker run命令中运行的节点版本,而不是尝试提供环境变量,以尝试让NVM选择正确的版本.例如:

docker build -t=jamescharlesworth-node:4.x-latest .
Run Code Online (Sandbox Code Playgroud)

当然,你的Dockerfile将在你的RUN指令中包含你在评论中提到的install命令:

RUN curl -sL https://deb.nodesource.com/setup_4.x | bash - 
RUN apt-get install -y nodejs
Run Code Online (Sandbox Code Playgroud)