Como o Docker lida com o desligamento do sistema?

Como o Docker lida com o desligamento do sistema?

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 shutdowncomando 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:

  1. Eu tenho contêineres em execução
  2. Eu emito o shutdowncomando para desligaro host sememitindo explicitamentedocker stop

O que o docker faz nesse cenário? Posso emitir o shutdowncomando 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 execo 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 stopprimeiro 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 stopvocê ficará bem.

Responder2

Há abordagem teórica (por @xenoid) e prática.

Execute o encerramento do servidor e observe o que acontece.

  1. 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?

  2. 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
  1. 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.confe confira este parágrafo: DefaultTimeoutStartSec=, DefaultTimeoutStopSec=, DefaultTimeoutAbortSec=, DefaultRestartSec=. O padrão é 90 segundos.

informação relacionada