如何在SpringBoot应用程序读取的Docker容器中存储和更新文件?

时间:2019-04-16 07:38:35

标签: azure docker kubernetes docker-swarm

我正在设置一个可能包含多个docker容器的环境。每个容器包含相同的SpringBoot应用程序。在SpringBoot应用程序的运行期间,需要一个.ini文件来处理不同的事情。此外,.ini文件可能会从容器外部进行更新。此更新或新的.ini文件应在所有其他容器中分发,以便最后在其他SpringBoot应用程序中可用。分发文件目前不是问题,而是如何存储文件,因为无法使用类路径。

我正在使用hazelcast来使用其群集功能。借助它,我可以在群集中的所有其他成员上分发新文件。一开始,我将.ini文件存储在类路径中。但是,如果.ini文件更改了,则将其放在类路径中就没有意义,因为您无法在jar中编写代码。另外,如果容器发生故障,那么榛树广播的内存也会丢失,因为它只有一个内存数据库。

我期望可以轻松替换.ini文件的过程。例如,容器在构建或类似过程中就已经知道文件(.ini文件的所有较新版本将具有相同的名称)。如果容器出现故障,则可以再次自行查找文件。而且,正如我已经提到的,我需要在运行时更改.ini文件。然后容器,或更具体地说,SpringBoot应用程序必须自动识别此更改。我认为可以通过REST调用来更改文件,该调用将文件存储在容器中的任何位置,或者由于类路径不起作用而允许写入的位置。

1 个答案:

答案 0 :(得分:0)

由于您的问题带有标签“ kubernetes”,因此我将尝试在此特定容器协调器的背景下回答您。

您要查找的功能在Kubernetes中称为ConfigMap。

将其视为从数据源(在您的情况下为ini配置文件)创建的键值对。

kubectl create configmap game-config --from-file=.ini-file

然后您可以在容器内以两种方式使用ConfigMap数据:

  1. 作为容器环境变量
  2. 作为填充的卷,在特定路径下安装在容器内

这里要注意的重要一点是,已装载的ConfigMap将自动更新。如果您对此概念感兴趣,请详细了解here