npm not found but installed from the shell script file in Dockerfile I have a following Dockerfile:

FROM ubuntu:18.04

RUN mkdir app &amp;&amp; cd app
WORKDIR app/

RUN apt-get update &amp;&amp; apt-get install -y \
    software-properties-common \
    curl \
    sudo \
    &amp;&amp; curl -O https://hyperledger.github.io/composer/latest/prereqs-ubuntu.sh \
    &amp;&amp; chmod u+x prereqs-ubuntu.sh \
    &amp;&amp; ./prereqs-ubuntu.sh \
    &amp;&amp; npm install -g \ # this line failed
    &amp;&amp; yo \
       composer-cli@0.20 \
       composer-rest-server@0.20 \
       generator-hyperledger-composer@0.20 \
       composer-playground@0.20

    CMD /bin/bash


The prereqs-ubuntu.sh is from https://github.com/hyperledger/composer/blob/master/packages/composer-website/jekylldocs/prereqs-ubuntu.sh.

However, it says /bin/sh: 1: npm: not found on the line npm install -g when I try to build the image. But npm is installed when running prereqs-ubuntu.sh already and can be ran successfully at the end of the file (npm --version).

Also, when I remove the npm-install part from the Dockerfile (shown below) and do docker run --name test -it myimage to see if npm is installed, but it is installed.

FROM ubuntu:18.04

RUN mkdir app &amp;&amp; cd app
WORKDIR app/

RUN apt-get update &amp;&amp; apt-get install -y \
    software-properties-common \
    curl \
    sudo \
    &amp;&amp; curl -O https://hyperledger.github.io/composer/latest/prereqs-ubuntu.sh \
    &amp;&amp; chmod u+x prereqs-ubuntu.sh \
    &amp;&amp; ./prereqs-ubuntu.sh \

    CMD /bin/bash
The issue is that prereqs-ubuntu.sh uses bash to install the npm. While the RUN directive uses sh to run the commands. 

Where is the npm installed

root@2cd4a6af90f4:/app# type npm
npm is /root/.nvm/versions/node/v8.16.0/bin/npm


The PATH for the RUN directive

# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin