10

When running docker-compose to launch my app, I'm getting a npm ERR! missing script: start despite having a start script specified.

package.json is

{
  "name": "myapp",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "body-parser": "~1.17.1",
    "cookie-parser": "~1.4.3",
    "debug": "~2.6.3",
    "ejs": "~2.5.6",
    "express": "~4.15.2",
    "mongoose": "^4.11.1",
    "morgan": "~1.8.1",
    "serve-favicon": "~2.4.2"
  }
}

and docker-compose.yml is

version: "2"
services:
  web:
    build: .
    volumes:
      - ./:/app
    ports:
      - "3500:3500"

2 things are not making sense to me:

  1. Launching the app with its Dockerfile works: if the missing start script really was the problem, shouldn't this fail as well?
  2. package.json does have a start script as you can see above

Not sure if needed but the Dockerfile is

FROM node:argon

RUN mkdir /app

WORKDIR /app

COPY package.json /app

RUN npm install

COPY . /app

EXPOSE 3500

ENV PORT 3500
CMD ["npm", "start"]

EDIT: I'm using docker run -p 3500:3500 app and docker-compose up

I'm new to this so may be missing something but am a bit stuck now.

mcansado
  • 2,026
  • 4
  • 25
  • 39
  • What command are you using to launch without docker compose? – kewne Jul 09 '17 at 21:44
  • 1
    have you tried again with `docker-compose up --build` ? – Robert Jul 09 '17 at 21:46
  • I had the same issue and @Robert answer solved it for me. Needed to use --build to get the original Dockerfile dependencies to rebuild the new npm dependencies I had. – abe732 Jul 31 '17 at 23:16

4 Answers4

6

You could try removing the volumes section - ./:/app
It looks like the /app is created within the container, but then subsequently you mount a host directory to /app, thus hiding the original /app in the container.

cactusme
  • 143
  • 7
1

The error you receive is that you cannot see the ./bin/www directory.

Follow the steps below.

  1. Is there ./bin/www directory.
  2. If there isn't. You must create.
  3. If there is. You must check is it running.

I hope I have been helpful.

salihgungor
  • 111
  • 1
  • 7
1

add

"docker":xxxxx
"docker-build":xxxxx

mines like this

"docker": "node --experimental-modules ./signal-server",
"docker-build": "docker build -t node-web-development/signalauth ."

your package json file

Omer Tekbiyik
  • 4,255
  • 1
  • 15
  • 27
1

Check that there is a package.json file in the same directory as the docker-compose.yml file that defines the "start" script. If not then that is likely the cause of the error as you're mounting the current directory into the container's app directory. A better setup would be to have your node app in it's own sub directory and leave the docker-compose file where it is. Then you could point to your node app directory by providing it to the build entry of your docker-compose.yml file:

version: "2"
services:
  web:
    build: ./yourNodeAppDir
    volumes:
      - ./:/app # is this necessary?
    ports:
      - "3500:3500"
CSharp
  • 1,396
  • 1
  • 18
  • 41