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
Leon Ma
  • 33
  • 1
  • 1
  • 4

1 Answers1

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
Yuri G.
  • 179
  • 4