【问题标题】:/bin/bash: npm: command not found (docker container)/bin/bash: npm: 找不到命令(docker 容器)
【发布时间】:2020-04-21 16:13:06
【问题描述】:

我已经用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 中安装 npmnvm 有什么想法吗?

【问题讨论】:

    标签: docker npm nvm


    【解决方案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

    【讨论】:

    • 嗯,没有办法在 dockerfile 中解决这个问题,所以我不必每次从图像运行容器时都这样做?
    • @u123:您是否尝试在我更新的答案中使用上面建议的两个ENV?它对我有用。
    【解决方案2】:

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

    【讨论】:

    • 但是假设容器已经在运行,难道不能只运行一个容器并发送/运行命令然后关闭吗?
    • 不,它应该可以工作!它与nvm安装有关@u123
    • 那是您正在运行的公共节点映像,我正在尝试从我自己的 dockerfile 运行映像,我尝试通过 nvm 安装节点,并且使用该映像它不起作用,可能是因为我在我的 docker 文件中做错了 - 这就是我发布这个问题的原因。
    • 您没有做错任何事情,这是 nvm 工作的方式,因为 nvm 不是它在 .bashrc 文件中注册的服务,它是可执行文件位置,我在尝试在同一台机器上创建不同用户之前遇到了这个问题使用 nvm,如果您通常使用节点安装它应该可以工作,我正在搜索有关此 nvm 问题的文章,一旦我找到它,我将在此处发布
    • 好的,但请明确我在帖子中提供的特定图像/dockerfile/nvm/npm 我遇到的问题不是一般的节点,它工作得很好
    猜你喜欢
    • 2016-02-13
    • 2018-02-02
    • 2018-11-13
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多