Docker - Container parando após fechar a sessão SSH
Table of Contents
Ao encerrar a sessão SSH com o servidor, seu container para? Entenda o que pode estar acontecendo.
#
Introdução
##
O Problema
Recentemente tive que subir um ambiente bem simples na AWS, era uma aplicação com dois containers que eram executados pelo Docker Compose
. Porém, uma coisa estranha estava acontecendo: ao encerrar a sessão ssh com o servidor os containers imediatamente ficavam indisponíveis.
#
Investigando o problema
##
Docker Logs
Uma das primeiras coisas que eu faço para investigar uma parada inesperada de um container é analisar seus logs, isso pode ser facilmente analisado através do comando:
docker logs container_name
Ao analisar os logs, percebi o seguinte erro:
[Tue Mar 18 19:13:05.229898 2025] [mpm_prefork:notice] [pid 1:tid 1] AH00169: caught SIGTERM, shutting down
Ao bater o olho, percebi que a ação de me desconectar do servidor estava desligando os containers, através de um comando SIGTERM
, que basicamente é um comando kill
para parar um processo.
##
Buscando uma solução
Ao pesquisar na internet sobre o problema eu descobri que usuários que executavam o Docker como usuários comuns e não como root
enfrentavam esse problema, o que faz sentido. Quando um usuário faz logout todos os seus processos são encerrados, ou seja, ao fechar a conexão ssh todos os processos eram encerrados. Importante: eu estava usando o usuário ubuntu
, que é criado pelo EC2 ao criar uma VM com AMI Ubuntu. Para resolver o problema eu precisaria fazer algo para que os processos não fossem encerrados, essa seria a minha solução.
#
Aplicando a solução
##
Linger
Basicamente, esse carinha faz com que os processos do usuário continuem em execução após o logout.
# Faz os processos continuarem em execução
sudo loginctl enable-linger $(whoami)
# Faz o Docker ser iniciado automaticamente para o usuário atual
systemctl --user enable docker
Após isso, pausei as aplicações com o comando docker-compose down
e subi novamente com docker-compose up -d
.
Após isso, problema resolvido. 😁