Sto eseguendo un'applicazione Java dropwizard in un contenitore mobile utilizzando l'immagine java:7u79
basata su debian/jessie
.SIGTERM non ricevuto da processo java utilizzando 'docker stop' e l'immagine java ufficiale
La mia applicazione Java gestisce il segnale SIGTERM
allo spegnimento con garbo. La gestione di SIGTERM
funziona perfettamente quando eseguo l'applicazione senza Docker.
Quando lo si esegue in un contenitore Docker, SIGTERM
non raggiunge l'applicazione Java quando si emette un comando docker stop
. Uccide il processo bruscamente dopo 10 secondi.
mio Dockerfile
:
FROM java:7u79
COPY dropwizard-example-1.0.0.jar /opt/dropwizard/
COPY example.keystore /opt/dropwizard/
COPY example.yml /opt/dropwizard/
WORKDIR /opt/dropwizard
RUN java -jar dropwizard-example-1.0.0.jar db migrate /opt/dropwizard/example.yml
CMD java -jar dropwizard-example-1.0.0.jar server /opt/dropwizard/example.yml
EXPOSE 8080 8081
Cosa c'è di sbagliato con questo Dockerfile
? C'è un altro modo per affrontare questo problema?
Questa è una buona risposta, ma potrebbe essere ancora meglio se hanno usato '' cmd' o ENTRYPOINT' con il formato _exec_, ad esempio 'ENTRYPOINT [" java "," - jar "," ... "]' https://docs.docker.com/reference/builder/#entrypoint – Andy
Sì, grazie per averlo indicato . Ho aggiornato la mia risposta di conseguenza. – h3nrik
'CMD [" java "," -jar ", ...]' non funzionava con le variabili 'ENV', ma' CMD exec java -jar' ha risolto il mio problema :) –