Node.js 可以在docker容器中运行npm/节点,但不能在dockerfile中运行
我有dockerfile,其中包含基本映像go,我安装了npm/node:Node.js 可以在docker容器中运行npm/节点,但不能在dockerfile中运行,node.js,docker,npm,nvm,Node.js,Docker,Npm,Nvm,我有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
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
启动此容器时,我可以在容器内执行节点
或npm
命令:
docker exec -it 763993cc1f7a bash
root@763993cc1f7a:/go# npm -v
3.10.10
但当我向dockerfile添加节点或npm命令时:
RUN npm ...
我得到:/bin/sh:1:npm:未找到
这怎么可能呢?您需要避免使用NVM。您可以在代码中使用多级dockerfile来实现这一点。假设Go是主要应用程序,网页包或其他构建活动需要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中引入的,因此您需要最新版本 这可能是你的问题@yamenk是的!为什么要从Go base创建节点映像?@TarunLalwani,因为我需要在一个映像中同时使用这两个节点。我没有显示Dockerfile的go部分。对于本地开发,我们使用go-contained和节点容器,但his仅在本地为我们工作。在以后的阶段中,我们必须将javascript保存在GOV中,您是否已经查看了多阶段构建?非常易于使用,将我的图像大小减少了150MB