背景
我正在尝试启用一个插件,该插件需要带有hashicorp保险库的glibc,在容器中运行。官方金库码头图像建立在高山图像(Dockerfile)上。我想建立一个基于debian的图像,它没有" dumb-init"与hashicorp实现匹配的包。
hashicorp提供的docker-entrypoint.sh使用了#!/usr/bin/dumb-init /bin/sh
的shebang,其中包含以下说明:
# Note above that we run dumb-init as PID 1 in order to reap zombie processes
# as well as forward signals to all processes in its session. Normally, sh
# wouldn't do either of these functions so we'd leak zombies as well as do
# unclean termination of all our sub-processes.
根据tini维护者对this question的评论,
例如,他们[dumb-init]支持信号重写而Tini不支持,但Tini支持subreapers并且他们不支持。但总的来说,如果你正在寻找僵尸收获的话,那么它们都可以做到
(但也许这已经改变了......)
如果有的话,我更愿意将shebang更新为#!/bin/sh
并让init处理使用docker调用上的--init
标志。
问题:
vault是否需要dumb-init的信号重写功能,或者docker built-in tini实现(从Docker 1.13.0开始)是否足够?
答案 0 :(得分:0)
dumb-init signal rewriting functionality的描述听起来很特殊。例如,docker stop
将始终在10秒后发送SIGTERM,然后发送SIGKILL;延迟是可配置的,但特定信号不是。但是,例如,nginx将接受SIGQUIT进行“正常”关闭(大概允许现有请求完成),因此,您可能更喜欢docker stop
发送SIGQUIT;这就是该选项的作用。
我不认为保险柜有任何特殊的信号处理功能(我在文档中只能找到sending it SIGUSR1 dumps its telemetry data),因此您可以使用Tini或docker run --init
提供的任何功能。