可以在docker容器中运行npm / node,但不能在dockerfile中运行

我有dockerfile有基本的形象去,我安装npm /节点:

FROM golang:1.7 RUN apt-get update && apt-get install -y wget ###node ENV NVM_DIR /usr/local/nvm ENV NODE_VERSION 6.10.1 RUN wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.31.3/install.sh | bash \ && . $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 

当我启动这个容器时,我可以在容器中执行nodenpm命令:

 docker exec -it 763993cc1f7a bash root@763993cc1f7a:/go# npm -v 3.10.10 

但是当我添加一个节点或npm命令到dockerfile时:

 RUN npm ... 

我得到: /bin/sh: 1: npm: not found这怎么可能?

您需要避免使用NVM。 你可以在代码中使用Multi stage dockerfile。 假设Go是主要应用程序,并且需要npm来进行webpack或其他构build活动

所以你最终的docker文件应该是像下面的东西

 ARG NODE_VERSION FROM node:${NODE_VERSION} as static ... RUN webpack build FROM go:1.7 COPY --from=static /app/static /app/static .... CMD ["./goapp"] 

这个特性是在Docker 17.05 ce中引入的,所以你需要最新的版本。