简体   繁体   中英

nodemon not restarting server on code change in docker container

I'm running my node.js application in a docker container, and nodemon is not reloading on changes. Here is my dockerfile:

WORKDIR /app
COPY package*.json ./

RUN yarn install
COPY . /app

EXPOSE 8080
CMD ["yarn", "dev"] 

I am building an image with this command:

docker image build -t test7.

and then running it with:

docker run -it -v "$(pwd)/app:/app/target_dir" test7 bash

I do yarn dev inside container, it starts the server once, but does no reload.

here's package.json file:

    "name": "self-learning",
      "version": "1.0.0",
      "main": "index.js",
      "license": "MIT",
      "scripts": {
        "start": "node index.js",
        "dev": "nodemon --legacy-watch index.js"
      },
      "dependencies": {
        "cors": "^2.8.5",
        "express": "^4.17.1",
        "express-winston": "^4.0.3",
        "multer": "^1.4.2",
        "nodemon": "^2.0.2",
        "pg": "^7.18.2",
        "winston": "^3.2.1"
      }
    }

Is there any way around it? How can I see changes without rebuilding a container?

I think, you need to include a ENTRYPOINT instruction. For me changing the ENTRYPOINT instruction worked. First it did not work, but then when I included --legacy-watch flag, it started working.

Changed ENTRYPOINT from the following

ENTRYPOINT [ "nodemon", "--inspect=0.0.0.0","./src/server.js" ]

to

ENTRYPOINT [ "nodemon", "--legacy-watch", "--inspect=0.0.0.0", "./src/server.js"]

My full docker file is as follows. Its a multi target docker file.

FROM node:alpine as debug

WORKDIR /work/

COPY ./package.json /work/package.json
RUN npm install
RUN npm install -g nodemon

COPY ./ /work/src/

#ENTRYPOINT [ "nodemon", "--inspect=0.0.0.0","./src/server.js" ]
ENTRYPOINT [ "nodemon", "--legacy-watch", "--inspect=0.0.0.0", "./src/server.js"]

FROM node:alpine as prod

WORKDIR /work/
COPY ./package.json /work/package.json
RUN npm install
COPY ./ /work/

CMD node .

I think you have run like this

docker run -it -v "$(pwd)/app:/app" test7

because you copied all your files inside /app directory not /app/target_dir

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM