Docker: ENTRYPOINT can't execute command because it doesn't find the file
I’m trying to create a container from
node js image and I have configured my
Dockerfile as shown:
FROM node:boron # Create app directory RUN mkdir -p /usr/src/app WORKDIR /usr/src/app # Install app dependencies COPY package.json /usr/src/app RUN npm install # Bundle app source COPY . /usr/src/app VOLUME ./:/usr/src/app ENTRYPOINT [ "npm run watch" ]
package.json I have a script called
watch than runs the gulp task named
If I run
npm run watch in my local environment the command works but when I try running the container it doesn’t and shows the next error:
docker: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused “exec: \”npm run watch\”: executable file not found in $PATH”.
2 Solutions collect form web for “Docker: ENTRYPOINT can't execute command because it doesn't find the file”
ENTRYPOINT [ "npm run watch" ]
This is an incorrect json syntax, it’s looking for the executable
npm run watch, not the executable
npm with parameters
With the json syntax you need to separate each argument. You can use the shell syntax:
ENTRYPOINT npm run watch
Or you can update the json syntax like (assuming
npm is installed in
ENTRYPOINT [ "/usr/bin/npm", "run", "watch" ]
You also have an incorrect volume definition:
Dockerfiles cannot specify the how the volume is mounted to the host, only that an anonymous volume is defined at a specific directory location. With a syntax like:
I’ve got strong opinions against using a volume definition inside of the Dockerfile described in this blog post. In short, you can define the volume better in a docker-compose.yml, all you can do with a Dockerfile is create anonymous volumes that you’d need to still redefine elsewhere if you want to be able to easily reuse them later.
If you use the list notation for
ENTRYPOINT, that is, with the
], you must separate the arguments properly.
ENTRYPOINT ["npm", "run", "watch"]
Right now it is trying to find a file literally named “
npm run watch” and that does not exist.