将nodemon与docker和docker-compose一起使用

问题描述 投票:0回答:4

我将 Nodemon 与 docker-compose 一起使用。 这是我的 Dockerfile:

FROM node:10

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

COPY . .

CMD ["npm", "start"]

我的docker-compose.yml

version: '3'
services:
  app:
    build: .
    volumes:
      - .:/usr/src/app
      - /usr/src/app/node_modules
    container_name: docker-node-mongo
    restart: always
    ports:
      - 3000:3000
      - 9229:9229
    command: npm start
    links:
      - mongo
      - redis
  mongo:
    container_name: mongo
    image: mongo
    ports:
      - "27017:27017"
  redis:
    image: redis:alpine
    volumes:
      - /var/redis/data:/data    

还有我的 package.json 脚本:

{
  "scripts": {
    "start": "nodemon --inspect=0.0.0.0 index.js"
  }
}

根据我工作的 docker 容器内的代码,我的代码正在更新,但我没有任何重新加载。

node.js docker docker-compose nodemon
4个回答
13
投票

如果您使用

-L
--legacy-watch
标志启动nodemon,则在检测到更改时它将正确重新启动。您的
package.json
文件中的脚本将是:

{
  "scripts": {
    "start": "nodemon -L --inspect=0.0.0.0 index.js"
  }
}

我发现这个解决方案是对这个要点的评论: https://gist.github.com/ksmithut/e126f7ddb40b760487a17e8b569a77b5#gistcomment-2725750

这可以在官方文档中找到:https://github.com/remy/nodemon#application-isnt-restarting


6
投票

重启时出现

inspect
的 nodemon 问题。您可以在此处阅读有关该问题的更多信息。您可以尝试nodemon团队提到的解决方法

"inspect": "kill-port --port 9229 && node --inspect=0.0.0.0:9229 build/startup.js",
"start_watch_inspect": "nodemon --delay 80ms --watch build/ build/startup.js --exec 'npm run inspect'",

如果您可以在不检查的情况下进行管理,则可以使用以下命令使其工作

"scripts": {
    "start": "nodemon index.js"
  }

这将与安装目录一起使用

docker run --rm -v /home/myapp:/root  --name test -it testnode

将代码复制到容器内的 docker build 和更新文件也可以正常工作。


0
投票

按照我对我的环境所做的操作。 我希望这对某人有帮助。


0
投票

我多年来一直在解决同样的问题,尝试了所有可能的黑客排列,最后,几个月前 docker-compose 开始原生支持监视模式。您可以在此处阅读更多内容。

简而言之,您可以在 docker-compose 中声明您的服务,类似于:

api:
   build: .
   develop:
       watch:
           - action: sync
             path: ./src
             target: /app/src
                 ignore:
                     - .git
                     - node_modules
           - action: rebuild
                 path: package.json
       ports:
            - 3000:3000

在此配置中,我们指定手表的自定义选项:

  • 操作
    sync
    会将
    path
    中更改的文件复制到
    target
    。忽略可确保
    .git
    node_modules
    不被观看。

在某些情况下(例如添加依赖项),您可能需要重建整个容器,因为复制粘贴是不够的。对于这种情况,您可以使用操作

rebuild
并指定将触发容器重建的文件或路径。

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.