Closed bltavares closed 8 years ago
Excelente, @bltavares!
Haveria alguma vantagem neste caso em usar o dumb-init
como PID 1?
@cv O dumb-init
tem duas vantagens sobre utilizar direto o processo que queremos executar:
Como o primeiro processo de um container tem um tratamento especial pelo Linux, é muito util ter um sistema simples que cuida desses casos especiais.
Eu desconsiderei introduzir o dumb-init
por ser mais uma dependência, mas isso poderia ser feita em um outro PR caso seja de interesse para que já possamos repassar sinais para o HAProxy, o Portal e o Editor. Isso também permitiria discutir melhor apenas a parte do dumb-init
.
Processos em ambientes Linux utilizam sinais para comunicar mudanças, como quando são pedidos para parar um processo ou recarregar configurações.
Containers Docker conseguem repassar esses sinais para o processo que ele iniciou, mas alguns dos nossos casos, o processo inicial é um shell Bash. Shells Bash não repassam sinais para os processos filhos por padrão, o que pode levar que alguns containeres fiquem não responssivos.
Esse commit utiliza o comando
exec
para repassar a responsabilidade do processo Bash, após processar o que for necessário, para o processo filho.Isso efetivamente troca o processo que está sendo executado no momento, removendo o processo Bash da cadeia de processamento de sinais.
Exemplo
Anteriormente, o container HAProxy estava assim:
Ao enviar um
docker kill
para o container, o processo Bash receberia um sinal de parada, mas não necessariamente repassaria para o processo HAProxy. Isso impede que o processo interno tenha tempo para limpar qualquer coisa antes que um sinal de parada definitiva seja enviado.Agora hierarquia de proceso será assim:
Após processar a informação necessaria no processo Bash, iremos trocar o processo para o processo filho diretamente. Os sinais agora serão enviados ao processo filho.
Mais detalhes disso estão disponiveis 'Scenario 1: A shell as PID 1' no seguinte post