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

/bin/bash: npm: command not found (docker container)

我已经用 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

上面 docker 文件中 nvm 安装的 npm 有什么问题吗?

您可以使用 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

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