Używam aplikacji Java Dropwizard w kontenerze Docker przy użyciu obrazu java:7u79
na podstawie debian/jessie
.SIGTERM nie został odebrany przez proces java używający 'przystanku docker' i oficjalnego obrazu java
Moja aplikacja Java obsługuje sygnał SIGTERM
, aby zamknąć się z wdziękiem. Obsługa SIGTERM
działa idealnie, gdy uruchamiam aplikację bez Dockera.
Po uruchomieniu w kontenerze Docker SIGTERM
nie dociera do aplikacji Java po wydaniu komendy docker stop
. Zabija proces gwałtownie po 10 sekundach.
My 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
Co jest nie tak z tym Dockerfile
? Czy istnieje jakiś inny sposób rozwiązania tego problemu?
To dobra odpowiedź, ale może być jeszcze lepiej, gdyby używali 'CMD' lub' ENTRYPOINT' w formacie _exec_, na przykład 'ENTRYPOINT [" java "," - jar "," ... "]' https://docs.docker.com/reference/builder/#entrypoint – Andy
Tak, dziękuję za wskazanie tego . Odpowiednio zaktualizowałem swoją odpowiedź. – h3nrik
'CMD [" java "," -jar ", ...]' nie działało ze zmiennymi 'ENV', ale' CMD exec java -jar' rozwiązał mój problem :) –