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
相关产品推荐
相关产品推荐

