2017-08-28 98 views
0

我有dockerfile已基本图像去,我安装NPM /节点:可以运行NPM /节点搬运工容器而不是在dockerfile

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 
[email protected]:/go# npm -v 
3.10.10 

但是,当我添加节点或NPM命令到dockerfile:

RUN npm ... 

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

+2

这可能是你的问题https://stackoverflow.com/questions/25899912/install-nvm-in-docker – yamenk

+0

@yamenk是的! – DenCowboy

+2

你为什么从Go基地建立一个Node图像? –

回答

2

您需要避免使用NVM。你可以在你的代码中使用Multi stage dockerfile。假设围棋是主要的应用,而需要的WebPack或其他建设活动NPM

所以你最终搬运工文件应该像下面

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"] 

此功能在码头工人介绍17.05 CE,所以你需要最新版本。

+0

非常容易使用,我的图像尺寸缩小了150MB – DenCowboy