可以 运行 npm / 节点在 docker 容器中但不能在 docker 文件中
Can run npm / node in docker container but not in dockerfile
我有包含基本映像的 dockerfile,我安装 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: not found
这怎么可能?
您需要避免使用 NVM。您可以在代码中使用 Multi stage dockerfile 来执行此操作。假设 Go 是主要应用程序,webpack 或其他构建需要 npm activity
所以你最终的 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 中引入的,因此您需要最新版本。
我有包含基本映像的 dockerfile,我安装 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: not found
这怎么可能?
您需要避免使用 NVM。您可以在代码中使用 Multi stage dockerfile 来执行此操作。假设 Go 是主要应用程序,webpack 或其他构建需要 npm activity
所以你最终的 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 中引入的,因此您需要最新版本。