3

I have a following Dockerfile:

FROM ubuntu:18.04

RUN mkdir app && cd app
WORKDIR app/

RUN apt-get update && apt-get install -y \
    software-properties-common \
    curl \
    sudo \
    && curl -O https://hyperledger.github.io/composer/latest/prereqs-ubuntu.sh \
    && chmod u+x prereqs-ubuntu.sh \
    && ./prereqs-ubuntu.sh \
    && npm install -g \ # this line failed
    && 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 && cd app
WORKDIR app/

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

    CMD /bin/bash
3

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.