docker node app总是使用nodemon在文件更改时崩溃

时间:2017-05-10 17:17:35

标签: node.js docker gulp

我正在使用最新版本的docker和最新的节点映像。我有一个启动nodemon进程的gulpfile。我使用--inspect标志来表示我想使用实验性的chrome dev工具调试器。但是当我更改文件时,nodemon会将其选中并重新启动进程但崩溃。

这是我的gulp任务:

gulp.task('start:dev', done => {
  let started = false;
  nodemon({
    script: path.join(__dirname, 'index.js'),
    ext: 'js json',
    nodeArgs: ['--inspect=0.0.0.0:9229'],
    watch: path.join(__dirname, 'express'),
    legacyWatch: true
  })
  .on('start', () => {
    // to avoid nodemon being started multiple times
    if (!started) {
      setTimeout(() => done(), 100);
      started = true;
    }
  });
});

这是错误:

Starting inspector on 0.0.0.0:9229 failed: address already in use

如果我将--inspect标记更改为--debug,它就像魅力一样。

我猜测重启过程太快,--inspect无法释放其端口。如果我进行另一个文件更改它会工作并正常重新启动。可能因为它有时间释放端口。

我试过在nodemon上使用延迟,但我宁愿不这样做。我想快速重启。我已经尝试使用事件,比如,重启和退出,等待几秒钟,然后重新启动整个gulp任务。但这很有气质,我想要快速重启,而不必乱砍一些东西。

现在我刚刚切换回--debug,但在最新的V8中已弃用。他们建议使用--inspect

也许唯一的方法是锁定我的节点版本?

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

只需杀死检查员并再次启动检查员 这是我们团队在package.json中的解决方案。 您最好终止检查程序进程,然后重新启动检查程序

"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'`

答案 1 :(得分:0)

似乎与以下内容有关: https://github.com/remy/nodemon/issues/1492

我的解决方法是在每次重新启动之前运行此命令:(在makefile,gulp文件等中)

lsof -i -n | grep 9229 | awk '{print $2}' | xargs kill

**如果放在Makefile中,请记住将$替换为$$ **

答案 2 :(得分:0)

有一个开放的issue解决了这个问题。

由于这个comment,到目前为止,我发现最简单的解决方法是在nodemon.json中使用"signal": "SIGINT"