/ bin / bash: npm: команда не найдена (docker контейнер) - PullRequest
0 голосов
/ 21 апреля 2020

Я создал docker образ с nvm :

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

Есть идеи, что случилось с npm, установленным с nvm в указанном выше файле dockerfile?

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

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

0 голосов
/ 21 апреля 2020

Вы можете понять это, используя 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
...