当我们使用docker发布java应用后,可以通过top命令查看容器中java进程的PID,基于如下考虑,当PID不为1时,建议修改docker构建和启动方式,保证PID为1:
- PID为1的进程结束后,容器会随之结束,这样可以通过宿主机监控,保证及时检测到容器的异常退出
- docker正常关闭时,PID为1的进程能够接收到关闭信号,从而保证实现优雅关闭
我们可以通过如下方法保证java进程在容器内部启动时的PID为1:
- ENTRYPOINT中直接启动["java", "-jar", "app.jar"]
- ENTRYPOINT中调用启动脚本["start.sh"],在脚本中通过如下方式启动java进程
exec java -jar app.jar
经验证,当通过上述方法启动java进程后,java进程PID为1
- 当使用kill 1关闭java进程后,容器随之关闭
- 从外部关闭容器后,java进程能够捕捉到关闭信号并打印日志