2017-05-03 82 views
3

我用这个:NPM命令泊坞容器不可

RUN sudo apt-get install -y nodejs 

,然后我们链接的NodeJS可执行像这样到节点:

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

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

为什么会这样?我以为npm总是和nodejs捆绑在一起?我还需要做些什么来安装npm?我确信nodejs已安装,但npm似乎不存在,$(which npm)什么也没有。

+0

在泊坞窗使用sudo往往是一个不好的做法(见https://docs.docker.com/ engine/userguide/eng-image/dockerfile_best-practices /#user) –

+0

您使用哪个基础映像? (FROM ...) –

+0

嗨弗拉德,我使用的“从openjdk:最新” –

回答

0

它可能是一个文档错误:

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

貌似与的NodeJS一起安装NPM,我们需要使用:

sudo apt-get install -y nodejs npm 

这是

  1. 一有点令人惊讶(尽管现在npm已经脱离了 从的NodeJS)
  2. 多了很多DEPS现在正在安装,该吸
+1

看起来像'apt-cache depends nodejs '也可以回答你的问题http://stackoverflow.com/a/22112729/2123530。感谢你,我今天学到了一个新的OPS技巧:) –

+0

如果你喜欢你所看到的,请竖起大拇指:) –

3

如果您使用我的解决方案从here(和你这样做的确看起来),那么你就应该知道,Java的图像是based on Debian Jessie

如果你看看杰西包,那么你会看到,杰西有你已经提到npmas a separate package

+0

哦,呵呵,谢谢,那是我的坏 –

+0

让我们把这个答案标记为解决问题:)谢谢 – Natim

2

所以,你的码头工人基本映像是openjdk:latest

毫不奇怪,当你运行apt-get install nodejs它安装0.10版。因为那时在Debian回购中可用。正如@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. 将您的Dockerfile基于node:latest +安装OpenJDK。换一种方式。
  3. 使用的东西已经建成,像搬运工图像既OpenJDK的+节点 - https://hub.docker.com/r/silas/openjdk-node/~/dockerfile/

enter image description here