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

标签 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 | 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

但是当我向 dockerfile 添加 Node 或 npm 命令时:

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 中引入的,因此您需要最新版本。

关于node.js - 可以在 docker 容器中运行 npm/node,但不能在 dockerfile 中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45913822/

相关文章:

docker - 如何将相同的本地文件夹结构复制到docker容器?

node.js - 使用 'npm'时需要登录github

node.js - Mocha + Supertest 中 404 测试的“Body Parse”错误

node.js - Firebase 管理员 : Is it necessary to check if uid decoded on the server (based on client ID token) matches the uid from the client?

javascript - 获取终端响应并将其存储为 Node js中的变量

javascript - 为什么 PNotify 选项 `after_open` 不起作用?

angular - Angular 库的 npm 发布

node.js - ElasticBeanstalk 上的 Meteor 部署失败

javascript - 用于自动完成搜索的 MongoDB + Node.js + AJAX 解决方案

docker - Kubernetes-通过php上传文件后nginx-ingress崩溃