Pular para o conteúdo principal

Docker e Kubernetes

Aplicação spring não recebendo sinais SIGTERM

Tenha cuidado com a forma com que você inicializa sua aplicação dentro do seu Dockerfile:

CMD ["sh", "-c", "java -jar app.jar"]
# OU
CMD java -jar app.jar

Essas duas formas podem apresentar problemas para repassar os sinais SIGTERM. Isso acontece porque essas abordagens iniciam um processo de shell como o processo principal (PID 1) do contêiner. A maioria dos shells não repassa sinais do sistema (como o SIGTERM) para seus processos filhos. Como resultado, a aplicação nunca é notificada á desligar.

solução

Para garantir que a aplicação Java seja o processo principal (PID 1), usando a "forma exec" do CMD ou ENTRYPOINT. Assim, ela recebe o SIGTERM diretamente.

ENTRYPOINT [ \
"java", \
"-jar", \
"app.jar" \
]