Apesar de administrar ambiente docker há quase uma década, apenas recentemente descobri que dá pra manter os containers rodando durante um restart do docker daemon, que normalmente acontece após um upgrade por exemplo.
O nome desse recurso é live-restore. Inclusive ele restaura regras de firewall necessárias para acesso à rede do container.
Para ativar é assim:
cat >> /etc/docker/daemon.json <<EOF
{
"live-restore": true
}
EOF
systemctl reload docker
Ou então enviar um sinal SIGHUP (kill -1) ao processo do dockerd.
Mão na roda pra quando faz upgrade dos pacotes, e o docker reinicia o daemon pós-upgrade.
Antes fazia shutdown de todos os containers, mesmo os declarados com restart: always
🤦🏻♂️.
Agora não mais, melhorando assim a disponibilidade do serviço.
Por: Hudson Murilo dos Santos
Referências: https://docs.docker.com/config/containers/live-restore/