javascript - 在node.js中捕获docker-compose关闭事件

标签 javascript node.js docker docker-compose

我一直试图在我的node.js应用程序中捕获关闭命令,以便可以在杀死该应用程序之前整理连接。

在生产中,我的应用程序使用docker swarm,我可以看到通过以下方式触发了SIGTERM:

process.on('SIGTERM', function() {});

但是,在我的开发环境中,我使用的是docker-compose rundocker-compose down,这似乎并不会触发我的 SIG * 捕获(我运行的是本地版本RabbitMQ,在关闭之前, SIG 事件也会发布)。

我正在Dockerfile和docker-compose文件中运行 ubuntu:bionic 镜像,我具有 init:true 。我的Docker引擎为18.09.2,撰写版本为1.23.2,带有版本:撰写文件顶部的“3.7”

这些都是我的index.js中的所有捕获事件:
process.on('exit', () => {
  reporter.ossEvent('APP STOPPED exit');
  shutdown();
});

process.on('SIGINT', () => {
  reporter.ossEvent('APP STOPPED SIGINT');
  shutdown();
});

process.on('SIGTERM', function() {
  reporter.ossEvent('APP STOPPED SIGTERM');
  shutdown();
});

process.on('SIGUSR1', () => {
  reporter.ossEvent('APP STOPPED SIGUSR2');
  shutdown();
});

process.on('SIGUSR2', () => {
  reporter.ossEvent('APP STOPPED SIGUSR2');
  shutdown();
})

最佳答案

#!/bin/bash
set -e

_kill_procs() {
  kill -TERM $node
}

# Relay quit commands to processes
trap _kill_procs SIGTERM SIGINT

dumb-init -- node ./build/index.js $@ &
node=$!

#sleep infinity

echo 'Starting node process now'

wait $node
上面的代码是听SIGTERM和SIGKILL并杀死节点

关于javascript - 在node.js中捕获docker-compose关闭事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55809536/

相关文章:

javascript - 禁用 js 后 div 不显示

javascript - Node 生成过程并存储输出

html - 使用 node.js 提供网页时如何摆脱 .html 扩展名?

javascript - 在 Node :7 image; libgs. 中安装 ghostscript4js 所以找不到

javascript - 使用带有 Promise 的 setState 后出现错误

javascript - 多个独立的 webpack 包 : chunks load not working correctly

javascript - 悬停时打开和关闭模态窗口,失焦时关闭

node.js - 如何在 Visual Studio 2017 中将 npm 包与 ASP.NET CORE 2 一起使用?

Docker 不支持使用 Docker 工具箱在 Windows 家庭系统上存储 secret

docker - Apache /nifi docker : how to commit changes to new container