Pular para o conteúdo principal

João Senger

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. 😁