Требуется ли для хранилища возможность перезаписи сигналов dumb-init, или будет достаточно встроенной реализации tini для докера?
Фон:
Я пытаюсь включить плагин, который требует glibc с hashicorp vault, работающий в контейнере. Официальный образ докера хранилища построен на альпийском образе ( Dockerfile). Я хочу создать образ на основе Debian, в котором нет пакета "dumb-init", соответствующего реализации hashicorp.
Docker-entrypoint.sh, предоставленный hashicorp, использует шебанг #!/usr/bin/dumb-init /bin/sh
со следующим объяснением:
# 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,
Например, они [dumb-init] поддерживают перезапись сигнала, а Tini - нет, но Tini поддерживает подзадачи, а они нет. В целом, тем не менее, если вы ищете пожинать зомби и все, либо подойдет
(но, возможно, это изменилось...)
Если любой из них подойдет, я бы предпочел обновить Шебанг до #!/bin/sh
и оставить обработку инициализации для использования --init
флаг на вызове докера.
Вопрос:
Требуется ли для хранилища возможность перезаписи сигналов в dumb-init, или будет достаточно встроенной реализации tini для докера (начиная с Docker 1.13.0)?
0 ответов
Описание функциональности перезаписи сигнала dumb-init звучит как довольно особый случай. docker stop
например, всегда будет посылать SIGTERM, а затем SIGKILL через 10 секунд; задержка настраивается, а конкретные сигналы - нет. Но, например, nginx примет SIGQUIT для "изящного" выключения (предположительно, позволяющего завершить существующие запросы), так что вы можете предпочесть docker stop
вместо этого отправить SIGQUIT; вот для чего этот вариант.
Я не верю, что в Vault есть какая-то специальная обработка сигналов (единственное, что я могу найти в документации, это то, что отправка SIGUSR1 сбрасывает его данные телеметрии), так что вы должны быть в порядке с tini или чем-то еще docker run --init
обеспечивает.