Info

Starting Node.js 15, if there is no WORKDIR specified in the Dockerfile, npm install running in the root of the container will cause an error!

The WORKDIR instruction in the Dockerfile works like cd in Linux, and also sets the current working directory to the specified path.

WORKDIR working_directory_path_in_container

For example, the Dockerfile below sets WORKDIR to /usr/app relative to the root of the container. So the package.json is copied from the local machine context to /usr/app, and npm install is run in /usr/app.

Finally, all files are copied to /usr/app, and the container will run node index.js by default in /usr/app when it is built from the image.

FROM node:alpine
 
WORKDIR /usr/app
 
COPY ./package.json ./
RUN npm install
 
COPY ./ ./
 
CMD ["node", "index.js"]

The benefits of WORKDIR are as follows:

  • Readability and Maintainability: Don’t need to specify absolute paths in each command
  • Consistency: Ensures that all commands operate in the same directory
  • Optimized Caching: Leverages Docker’s layer caching more effectively
  • Default Working Directory for CMD: Ensures that your application starts in the correct directory

References