【问题标题】:Use nodemon with docker and docker-compose将 nodemon 与 docker 和 docker-compose 一起使用
【发布时间】:2019-12-25 16:36:07
【问题描述】:

我将 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 容器内的代码,我的代码正在更新,但我没有任何重新加载。

【问题讨论】:

  • 你可以通过 ssh 进入容器并检查你的 package.json 吗?
  • @federkun { "name": "docker-node-mongo", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "start": "nodemon --inspect=0.0.0.0 index.js" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "bluebird": "^3.5.5", "body-parser": "^1.18.3", "ejs": "^2.6.1", "express": "^4.16.3", "mongoose": "^5.2.7", "nodemon": "^1.19.1", "redis": "^2.8.0" } }
  • 您必须在您的 dockerfile 中添加 nodemon 作为全局变量,即 run npm install -g nodemon
  • @Intellidroid FROM node:10 WORKDIR /usr/src/app COPY package*.json ./ RUN npm install -g nodemon RUN npm install COPY . . CMD ["npm", "start"] 如果你是这个意思,它就行不通了。
  • 您是否在重新启动 docker-compose 时进行了重建? docker-compose up --build

标签: node.js docker docker-compose nodemon


【解决方案1】:

重启时带有inspect 的nodemon 的问题。您可以阅读更多关于问题here 的信息。您可以尝试 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 和更新文件也可以正常工作。

【讨论】:

    【解决方案2】:

    如果您使用-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的官方文档中找到

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-26
      • 1970-01-01
      • 2020-06-26
      • 2019-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多