我有dockerfile,它有基本映像go,我安装npm/node:
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
当我启动这个容器时,我可以在容器内执行node
或npm
命令:
docker exec -it 763993cc1f7a bash
root@763993cc1f7a:/go# npm -v
3.10.10
但是当我将节点或npm命令添加到dockerfile时:
RUN npm ...
我得到:/bin/sh: 1:npm:未找到
这怎么可能?
您需要避免使用NVM。您可以在代码中使用多阶段dockerfile来做到这一点。假设Go是主端,webpack或其他构建活动需要npm
所以你最终的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中引入的,因此您需要最新版本。