Java 如果内部运行的JVM进程死亡,则杀死docker容器

Java 如果内部运行的JVM进程死亡,则杀死docker容器,java,docker,docker-compose,jvm,Java,Docker,Docker Compose,Jvm,我是Docker的新手,我尝试了一个特定的场景,但在网上或论坛上找不到任何解决方案 关于我的设置的细节是这样的,我在Linux上使用Docker 17.12和compose设置。我有一个包含Java进程的容器。作为一种程序功能,我们根据一些条件关闭正在运行的Java程序,以避免进一步损坏程序的数据和一致性。一旦检测到Java程序宕机,我们就通过docker stack deploy手动启动它 Docker中是否有任何功能/信号/设置,一旦检测到其中运行的Java程序已关闭,就会杀死容器(自销毁或

我是Docker的新手,我尝试了一个特定的场景,但在网上或论坛上找不到任何解决方案

关于我的设置的细节是这样的,我在Linux上使用Docker 17.12和compose设置。我有一个包含Java进程的容器。作为一种程序功能,我们根据一些条件关闭正在运行的Java程序,以避免进一步损坏程序的数据和一致性。一旦检测到Java程序宕机,我们就通过docker stack deploy手动启动它


Docker中是否有任何功能/信号/设置,一旦检测到其中运行的Java程序已关闭,就会杀死容器(自销毁或自rm)?

如果设置正确,容器就是JVM进程。请记住,容器只不过是在资源使用方面被包含的进程,并且在文件系统和Linux名称空间方面被隔离

因此,请确保通过在入口点和/或命令配置中运行Java来启动容器,而不是像设置中那样使用systemd之类的流程管理器

在Dockerfile中,这通常类似于以下内容:

FROM openjdk:14   
COPY /build/libs/your-application.jar ./ 
CMD java -jar your-application.jar

这就是它通常的工作方式:如果容器内的主进程退出,那么容器也会退出。你有一个不同的设置吗?看起来你没有使用Docker的CMD命令启动JVM进程。。。对于某些场景,我们需要在启动java进程之前进行soem准备工作,我们会这样做。。。i、 我们启动bash脚本,然后启动java作为子进程。。。如果您遵循类似的方法,那么我们将使用bash的trap函数从容器中找到kill信号并通知JVM。。类似地,我们保持一个while循环来检查JVMPID的活动性,并退出bash以让容器关闭。。。