【问题标题】:Kill the docker container if the JVM processes running inside dies [closed]如果内部运行的 JVM 进程死亡,则终止 docker 容器 [关闭]
【发布时间】:2020-12-19 05:06:15
【问题描述】:

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

我的设置细节是这样的,我在 Linux 上使用 Docker 17.12 和 compose 设置。我有一个包含 Java 进程的容器。作为一个程序功能,我们根据几个条件关闭正在运行的Java程序,以免进一步破坏我们程序的数据和一致性。一旦检测到 Java 程序出现故障,我们通过 docker stack deploy 手动将其启动。

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

【问题讨论】:

  • 正常情况下是这样的:容器内的主进程退出,容器也退出。您是否有特定的设置以不同的方式工作?
  • 您似乎没有使用 Docker 的 CMD 命令启动 JVM 进程...我们在某些场景中这样做,我们需要在启动 java 进程之前进行一些预工作...即我们开始bash脚本依次启动java作为子进程......如果你遵循类似的方法,那么我们使用bash的trap函数从容器中找到kill信号并通知JVM..同样我们保持一个while循环来检查jvm pid活动并退出bash 让容器关闭...

标签: java docker docker-compose jvm


【解决方案1】:

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

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

这在 Dockerfile 中通常看起来像这样:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多