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

时间:2019-04-23 10:47:09

标签: javascript node.js docker docker-compose

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

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

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

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

我正在Dockerfile中运行 ubuntu:bionic 映像,并且在docker-compose文件中,我具有 init:true 。我的Docker引擎为 18.09.2 ,compose为 1.23.2 ,compose文件顶部的 version:“ 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();
})

1 个答案:

答案 0 :(得分:1)

#!/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并杀死节点