Marco
Marco

Reputation: 23937

package.json not found when moving from Dockerfile to docker-compose

I'm getting to know React and created a small application using Create-React-App, which is run inside a docker container using the following dockerfile:

FROM node:latest

WORKDIR /app

# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH

# install app dependencies
COPY package.json ./
COPY package-lock.json ./
RUN npm install --silent
RUN npm install -g [email protected] -g --silent

#add app to container
COPY . ./
CMD ["npm", "start"]

That works fairly well and I now wanted to integrate this into a docker-compose workflow, to run an api backend using asp.net core and this React application side-by-side:

version: '3.7'
services:
  backend:
    asp.netcore
  db:
    sql2019linux
  ui:
    container_name: ui
    build:
      context: ./UI
      dockerfile: Dockerfile
    ports:
      - '8080:3000'
    volumes:
      - './:/app'
      - '/app/node_modules'

This now fails with the node error:

npm ERR! code ENOENT
npm ERR! syscall open
npm ERR! path /app/package.json
npm ERR! errno -2
npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent

The backend and db services are coming up finde. What exactly is going sideways here and how to I fix it?

Upvotes: 2

Views: 3379

Answers (1)

jeeves
jeeves

Reputation: 2031

I think this may be your problem.

volumes:
  - './:/app'

Looks like you are mounting the directory that the docker-compose files is in to the app directory of the container and npm start is probably bawking because it cannot find the package.json in the workdir of the built image (which is also /app).

Try removing the volumes.

Upvotes: 2

Related Questions