/bin/sh: npm: команда не найдена

Я создаю образ докера для stf. Установка nodejs напрямую с помощью apt-get install nodejs, у меня было много проблем. Поэтому я решил пойти по пути nvm. ..

make sure apt is up to date
RUN apt-get update --fix-missing
RUN apt-get install -y curl
RUN sudo apt-get install -y build-essential libssl-dev
ENV NVM_DIR /usr/local/nvm
ENV NODE_VERSION 6

# Install nvm with node and npm
RUN curl https://raw.githubusercontent.com/creationix/nvm/v0.30.1/install.sh | bash \
    && source $NVM_DIR/nvm.sh \
    && nvm install $NODE_VERSION \
    && nvm alias default $NODE_VERSION \
    && nvm use default

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

#WORKDIR /usr/app


# Install app dependencies
RUN npm install

и вывод

=> Downloading nvm from git to '/usr/local/nvm'
=> Cloning into '/usr/local/nvm'...
* (HEAD detached at v0.30.1)
  master

=> Appending source string to /root/.bashrc
=> Close and reopen your terminal to start using nvm
Downloading https://nodejs.org/dist/v6.13.0/node-v6.13.0-linux-x64.tar.xz...
######################################################################## 100.0%
WARNING: checksums are currently disabled for node.js v4.0 and later
Now using node v6.13.0 (npm v3.10.10)
default -> 6 (-> v6.13.0)
Now using node v6.13.0 (npm v3.10.10)
Removing intermediate container eb9cb6c46f34
 ---> eeef6bf9f0f1
Step 38/52 : ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules
 ---> Running in 185bef8e530c
Removing intermediate container 185bef8e530c
 ---> 0e5bf7b1cfd9
Step 39/52 : ENV PATH      $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH
 ---> Running in 00d58493e199
Removing intermediate container 00d58493e199
 ---> 81ed9823020b
Step 40/52 : RUN npm install
 ---> Running in 1c7577133e24
/bin/sh: npm: command not found
The command '/bin/sh -c npm install' returned a non-zero code: 127

Пожалуйста, помогите. Спасибо

Запустил контейнер и проверил путь NPM

root@69e513b99e68:/home/mobile/MobileFarmDocker#

 echo $PATH
/usr/local/nvm/versions/node/v6.13.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

root@69e513b99e68:/home/mobile/MobileFarmDocker# which npm
/usr/local/nvm/versions/node/v6.13.0/bin/npm

person SlickTester    schedule 02.03.2018    source источник
comment
Просто удалите неудачный шаг, создайте образ, запустите его с оболочкой и, находясь внутри контейнера, проверьте $PATH и расположение npm и убедитесь, что последний находится на пути   -  person Oleg Sklyar    schedule 02.03.2018
comment
@alex npm является частью node.js   -  person SlickTester    schedule 02.03.2018
comment
@OlegSklyar запускал контейнер с опцией отсоединения, контейнер выходил без detach.mobile@admin1-desktop:~/MobileFarmDocker$ sudo docker exec -i -t 69e513b99e68 /bin/bash root@69e513b99e68:/home/mobile/MobileFarmDocker# который npm /usr/локальные/nvm/версии/узел/v6.13.0/bin/npm   -  person SlickTester    schedule 02.03.2018
comment
@OlegSklyar Как я могу это исправить?   -  person SlickTester    schedule 02.03.2018
comment
Вам нужно создать образ докера, подобный этому. Я настоятельно рекомендую использовать один из образов узлов библиотеки докеров: hub.docker.com/r/library. /узел   -  person qubyte    schedule 02.03.2018
comment
(по крайней мере, вы можете найти связанные файлы докеров полезными для решения вашей проблемы)   -  person qubyte    schedule 02.03.2018


Ответы (1)


Ваша переменная $NODE_VERSION имеет значение 6, как определено в Dockerfile (ENV NODE_VERSION 6), но оно должно быть 6.13.0, чтобы следующая строка могла работать правильно:

ENV PATH      $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH

(сопоставление с /usr/local/nvm/versions/node/v6.13.0/bin)

В противном случае вы фактически генерируете следующий (неправильный) путь:

/usr/local/nvm/versions/node/v6/bin
person nbkhope    schedule 02.03.2018