Vault是否需要dumb-init的信号重写功能,或者docker内置的tini实现是否足够?

时间:2017-12-29 17:04:38

标签: docker init hashicorp-vault

背景

我正在尝试启用一个插件,该插件需要带有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开始)是否足够?

1 个答案:

答案 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提供的任何功能。