Reputation: 2164
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:
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.
Upvotes: 11
Views: 18375
Reputation: 35
I was getting this error and then I realized I was using vite. I had to change the line from
CMD ["npm", "start"]
to
CMD [ "npm", "run", "dev"]
More on containerization of react with vite in this blog https://xeon2k.wordpress.com/2024/01/25/containerizing-react-app-with-vite/
Upvotes: 1
Reputation: 1476
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"
Upvotes: 2
Reputation: 11
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
Upvotes: 1
Reputation: 111
The error you receive is that you cannot see the ./bin/www directory.
Follow the steps below.
I hope I have been helpful.
Upvotes: 1
Reputation: 143
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.
Upvotes: 6