AWS ECS 中的 Docker 容器有时可能无法捕获 SIGTERM 信号,这可能会导致容器不正确地停止或无法正常退出。为了避免这个问题,可以使用以下代码片段在容器启动时向 Docker 发送 SIGINT 信号:
#!/bin/bash
# Override SIGTERM to avoid certain Docker issues
function trap_handler() {
echo "Stopping container";
# Send SIGINT instead of SIGTERM
kill -SIGINT "${child_pid}"
wait "${child_pid}"
}
# Override the default SIGTERM handling
trap trap_handler SIGTERM
# Start your server
./my_server &
child_pid="$!"
# Wait for the child process to finish
wait "${child_pid}"
以上脚本指定启动服务器的 my_server
命令,并使用 trap_handler
方法来处理 SIGTERM 信号。在这个方法中,我们通过向子进程发送 SIGINT 信号来代替默认的 SIGTERM 信号,并等待它正常退出。这样可以确保容器会正常停止并释放资源。