为什么Docker只能使用&wait命令来处理SIGTERM?

为什么Docker只能使用&wait命令来处理SIGTERM?

我遇到了奇怪的行为,我的 Docker 映像有以下入口点脚本:

#!/bin/bash
trap " \
        service apache2 stop; \
        " SIGHUP SIGINT SIGTERM
trap "exit" ERR

service apache2 start

tail -f /var/log/apache2/access.log

上面的脚本确实不是按预期处理 SIGTERM,但它什么也不做!(我在 Apache 日志中看到,它被不干净地终止了),Docker 等待 10 秒钟然后将其杀死。

但是当我将最后一行改为以下内容时,它运行完美

tail -f /var/log/apache2/access.log & wait

以下也做了不是工作:

tail -f /var/log/apache2/access.log &

有人能为我解释一下这种行为吗?我不明白为什么会发生这种情况。这背后有什么魔力& wait?有没有更好的方法可以让 Docker 容器保持运行,同时能够处理信号?

答案1

有点晚了,但是 bash 不会处理陷阱,直到当前命令退出(tail),与普遍的看法相反,它不会这样做。'wait' 很特殊并且是可中断的。

相关内容