You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker超时后如何终止健康检查进程?

Docker健康检查超时后的命令终止逻辑排查

我正尝试通过逆向工程或查找Go代码(已搜索但未找到),确定Docker在健康检查超时后如何终止对应命令。已知流程是先发送SIGTERM信号,再发送SIGKILL信号,但无法捕获并记录这两个信号的间隔时长。使用strace跟踪dockerd或docker run也未找到相关实现细节。

以下测试代码在Docker运行期间仅会记录数字0-4:

#include <signal.h>
#include <unistd.h>
#include <stdio.h>

FILE *fp = NULL;

void catch(int signo) {
   fprintf(fp, "caught: %d\n", signo);
   fflush(fp);
}

int main(void) {
    signal(SIGTERM, catch);
    signal(SIGINT, catch);
    signal(SIGHUP, catch);

    fp = fopen("/tmp/healthcheck.log", "a");

    for(int i = 0; i < 3600; i++) {
        sleep(1);
        fprintf(fp, "%d\n", i);
        fflush(fp);
    }

    return 0;
}

对应的Dockerfile:

FROM ubuntu:22.04 as base
COPY healthcheck /
HEALTHCHECK --interval=1s --timeout=5s CMD ["/healthcheck"]
CMD sleep 60

内容的提问来源于stack exchange,提问作者rrauenza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 05:32:22