npm命令在Docker容器中不可用

时间:2017-05-03 21:12:03

标签: node.js docker npm

我用这个:

RUN sudo apt-get install -y nodejs

然后我们将nodejs可执行文件链接到节点,如下所示:

RUN sudo ln -s `which nodejs` /usr/bin/node

这一切都很好,但出于某种原因," npm"安装nodejs后命令不可用。

为什么会这样?我以为npm总是与nodejs捆绑在一起?我还需要做什么才能安装npm?我确定已经安装了nodejs,但是npm似乎不存在,$(which npm)什么也没有产生。

3 个答案:

答案 0 :(得分:3)

如果您正在使用here中的解决方案(而且看起来确实如此),那么您应该知道,Java图像是based on Debian Jessie

如果您看一下Jessie包,那么您会看到,Jessie有npm as a separate package

答案 1 :(得分:2)

正如您已经提到的,您的泊坞窗基础图像为openjdk:latest

运行apt-get install nodejs安装版本0.10时不足为奇。因为那时Debian repos中有什么可用的。正如@nordenheim正确指出的那样 - npm并未包含在node.js发行版中。

因此,根据您的评论,您希望安装一个新的node.js,例如7.x。

您有3个选项:

  1. 将您的Dockerfile基于openjdk:latest +安装node.js。只需从官方node.js Dockerfile - https://github.com/nodejs/docker-node/blob/master/7.10/wheezy/Dockerfile
  2. 复制几行
  3. 将您的Dockerfile基于node:latest +安装OpenJDK。只是另一种方式。
  4. 使用已构建的内容,例如包含openjdk + node的docker镜像 - https://hub.docker.com/r/silas/openjdk-node/~/dockerfile/
  5. enter image description here

答案 2 :(得分:1)

它可能是文档错误:

https://nodejs.org/en/download/package-manager/

看起来像和nodejs一起安装npm,我们需要使用:

 sudo apt-get install -y nodejs npm

这是

  1. 有点令人惊讶(虽然npm现在解耦了,这很好 来自nodejs)
  2. 现在正在安装更多deps,这很糟糕