/ bin / bash:npm:找不到命令(docker容器)

时间:2020-04-21 16:13:06

标签: docker npm nvm

我已经用nvm构建了一个docker镜像:

FROM ubuntu:19.10

RUN rm /bin/sh && ln -s /bin/bash /bin/sh

RUN apt-get update && \
    apt-get -y dist-upgrade && \
    apt-get -y autoremove && \
    apt-get clean all


RUN apt-get install -y \
    git \
    curl \
    bash-completion

ARG NODE_VERSION='12.0.0'
ARG NVM_DIR=/root
ARG NVM_VERSION='v0.35.3'

RUN curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/$NVM_VERSION/install.sh" | bash \
    && source $NVM_DIR/nvm.sh \
    && nvm install $NODE_VERSION

ENV TERM=xterm

现在,我正在尝试测试是否可以启动容器并运行npm

docker run my-npm-image /bin/bash -c  "npm --version"

但这给出了

/bin/bash: npm: command not found

如果我改为这样做:

docker run -it my-npm-image /bin/bash
root@laptop:/# npm --version
6.9.0

有效。因此npm已安装在映像中,但是如果没有先输入容器,我将无法运行它。

使用上述方法,运行其他命令的通知工作正常:

docker run my-npm-image /bin/bash -c  "git --version"
git version 2.20.1

有什么想法在上面的dockerfile中安装了npm的{​​{1}}带来了什么?

2 个答案:

答案 0 :(得分:1)

PATH不知道npm的位置,因为如果我显式设置PATH,它将对我有用。

$ docker run --rm my-npm-image /bin/bash -c "PATH=/root/versions/node/v12.0.0/bin;$PATH npm --version"
6.9.0

要设置npm路径,请尝试将以下内容添加到Dockerfile中:

...
...
ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules
ENV PATH $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH

ENV TERM=xterm

参考:https://gist.github.com/remarkablemark/aacf14c29b3f01d6900d13137b21db3a

答案 1 :(得分:-1)

您可以使用docker exec

找出答案
docker exec -it <container-Id> npm --version

https://docs.docker.com/engine/reference/commandline/exec/

它也可以按照您提到的方式工作,它可能取决于您使用的图像或配置不正确

 docker run -it node:12  /bin/bash -c  "npm --version"
 6.14.4