
Esta mesma pergunta já foi feita antesaqui no SOeaqui no Reddit. No entanto, a questão real nunca é respondida.
Tenho nossos serviços Atlassian em execução dentro de contêineres docker. No entanto, estou me perguntando o que acontece quando emito um shutdown
comando parao host. Ele tenta encerrar os contêineres normalmente ou tenta eliminá-los imediatamente? De alguma forma, parece que não consigo encontrar recursos reais sobre isso, talvez porque sou novo no docker.
Imagine o seguinte:
- Eu tenho contêineres em execução
- Eu emito o
shutdown
comando para desligaro host sememitindo explicitamentedocker stop
O que o docker faz nesse cenário? Posso emitir o shutdown
comando com segurança e esperar que meus contêineres sejam encerrados normalmente antes de qualquer outra coisa?
No meu caso utilizo uma instância do Ubuntu Server 19.04 se isso for importante, mas a questão é voltada para um cenário mais geral/abrangendo as principais distros.
Responder1
Seus contêineres devem receber um SIGTERM como todos os outros processos do sistema.
O problema é que o que recebe o SIGTERM é o processo principal do contêiner (aquele iniciado por ENTRYPOINT). Se o contêiner executa um script para inicializar um binário, é importante que exec
o binário se torne o processo do contêiner, caso contrário o SIGTERM é recebido pelo interpretador shell que normalmente não o encaminhará para o filho.
AFAIK docker stop
primeiro tenta um SIGTERM no contêiner e espera que ele saia em 10 segundos; caso contrário, envia um SIGKILL. Portanto, se seus contêineres pararem rapidamente, docker stop
você ficará bem.
Responder2
Há abordagem teórica (por @xenoid) e prática.
Execute o encerramento do servidor e observe o que acontece.
A consola.Embora a rede possa ser cortada imediatamente, a sequência de encerramento ainda pode demorar algum tempo. Observe no console (alguns provedores de hospedagem fornecem console virtual) como acontece - quanto tempo realmente leva a sequência de desligamento e o que acontece enquanto isso?
Os registros.Pelo que tenho visto, o contêiner do banco de dados costuma ser a preocupação. Será morto ou encerrado graciosamente? A verdade está nos registros. Observe-os cuidadosamente. Se você inicializar o sistema e ver esses logs com carimbos de data/hora de desligamento, você está indo muito bem:
.
2023-08-11 14:43:21 0 [Note] InnoDB: Starting shutdown...
[...]
2023-08-11 14:43:21 0 [Note] mariadbd: Shutdown complete
- Configuração do tempo de desligamento.Você também pode investigar mais detalhadamente como alterar os parâmetros de tempo de reinicialização. Veja
man systemd-system.conf
e confira este parágrafo:DefaultTimeoutStartSec=, DefaultTimeoutStopSec=, DefaultTimeoutAbortSec=, DefaultRestartSec=
. O padrão é 90 segundos.