Когда не следует использовать Docker, запустите --init - PullRequest
5 голосов
/ 07 июня 2019

Флаг --init из docker run приводит к тому, что система инициализации tini используется в качестве ENTRYPOINT. Как следствие, приложение, запущенное в контейнере, будет дочерним процессом системы инициализации, так что оно может позаботиться об обработке сигналов, пожинании зомби и т. Д.

docker-compose также имеет сервисную настройку init: true.

Поскольку tini работает прозрачно, Dockerfiles не нужно каким-либо образом изменять (это то, что говорят tini документы).

Итак, мои вопросы:

  • Есть ли недостатки у --init?
  • При каких обстоятельствах было бы лучше избегать использования --init?
  • Если серьезных недостатков нет, почему --init не является настройкой по умолчанию?

1 Ответ

0 голосов
/ 15 июня 2019

Недостатков использования флага - init нет. Тем не менее, процесс, который становится идентификатором PID 1 в вашем контейнере, не охватывает все функции процесса init. В большинстве случаев это не должно быть проблемой, так как вам нужна только обработка сигналов и дочерних процессов.

При каких обстоятельствах было бы лучше избегать использования --init?

Если вы закодировали свое приложение для обработки СИГНАЛОВ, например, в NodeJS:

const registerSignals = () => {
process.on('SIGTERM', () => {
    console.log('SIGTERM received');
    shutDown(0);
});
process.on('SIGINT', () => {
    console.log('SIGTERM received');
    shutDown(0);
});
}

тогда вы можете избежать использования - init или tini (Убедитесь, что вы используете exec form при запуске вашего контейнера, если хотите, чтобы приведенный выше фрагмент работал)

В случае отсутствия серьезных недостатков: почему --init не является настройкой по умолчанию?

Потому что сделать ваши контейнеры SIGNAL осведомленными, как показывает мой фрагмент, не так сложно, и, кроме того, у вас может быть какой-то экзотический случай для PID 1, который tini не покрывает, так что нет веских оснований для введения tini по умолчанию во все контейнеры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...