每当配置文件更改时,重新启动 Docker 容器内的进程
Restart a process inside a Docker container whenever the config file changes
我有一个 DockerFile,它使用 jar 文件和配置文件作为参数在单个 docker 容器中启动 2 个进程
java-罐子process1.jarprocess1.cfg&
java-罐子process2.jarprocess2.cfg
process1.cfg 和 process2.cfg 位于挂载的目录中。现在,每当任何 cfg 文件发生变化时,我都需要重新启动相应的进程以使新的更改生效。所有这些都将在更新配置文件并重新启动进程的 REST 微服务中使用 Java 以编程方式完成。知道如何去做吗?
您的 Java 应用启动配置更改监控 service/thread 可以普遍解决该问题,它通过在开始时启动它来管理实际业务 service/thread(s)重新启动任何更改(如果更改实际上需要重新启动)。文件更改监控是标准 Java 功能。该解决方案不需要任何 REST,它不受微服务架构的约束(尽管它在其中更明智)并且不受 docker 容器的限制。
如果您不想要任何基于文件的配置,也可以这样做,但监控位可以是例如一个基于 vert.x 的 Web 服务器在启动时或任何更新时侦听提供配置的外部 REST 请求。其余的保持不变。
在我目前的工作场所,我们实际上有一个以这种方式运行的模块,它被部署到 docker 并使用文件系统监控和 vert.x 网络服务器进行配置更改。
如果需要支持多个配置,您甚至可以更进一步,让监控位在内部启动多个实例。
我有一个 DockerFile,它使用 jar 文件和配置文件作为参数在单个 docker 容器中启动 2 个进程
java-罐子process1.jarprocess1.cfg& java-罐子process2.jarprocess2.cfg
process1.cfg 和 process2.cfg 位于挂载的目录中。现在,每当任何 cfg 文件发生变化时,我都需要重新启动相应的进程以使新的更改生效。所有这些都将在更新配置文件并重新启动进程的 REST 微服务中使用 Java 以编程方式完成。知道如何去做吗?
您的 Java 应用启动配置更改监控 service/thread 可以普遍解决该问题,它通过在开始时启动它来管理实际业务 service/thread(s)重新启动任何更改(如果更改实际上需要重新启动)。文件更改监控是标准 Java 功能。该解决方案不需要任何 REST,它不受微服务架构的约束(尽管它在其中更明智)并且不受 docker 容器的限制。
如果您不想要任何基于文件的配置,也可以这样做,但监控位可以是例如一个基于 vert.x 的 Web 服务器在启动时或任何更新时侦听提供配置的外部 REST 请求。其余的保持不变。
在我目前的工作场所,我们实际上有一个以这种方式运行的模块,它被部署到 docker 并使用文件系统监控和 vert.x 网络服务器进行配置更改。
如果需要支持多个配置,您甚至可以更进一步,让监控位在内部启动多个实例。