Как сохранить и обновить файл в Docker-контейнере, который читается приложением SpringBoot? - PullRequest
0 голосов
/ 16 апреля 2019

Я настраиваю среду, которая может содержать несколько контейнеров докеров.Каждый контейнер содержит одно и то же приложение SpringBoot.Во время выполнения приложения SpringBoot .ini-файл необходим для работы с разными вещами.Кроме того, .ini-файл может обновляться извне контейнеров.Это обновление или новый INI-файл следует распространить среди всех других контейнеров, чтобы оно было доступно в других приложениях SpringBoot в конце.Распространение файла не является проблемой на данный момент, но как сохранить файл, потому что путь к классу не может быть использован.

Я использую hazelcast, чтобы использовать его функцию кластера.С его помощью я могу распространять новый файл среди всех остальных членов кластера.Сначала я сохранил INI-файл в пути к классам.Но если файл .ini изменяется, нет смысла помещать его в путь к классам, потому что вы не можете писать в jar-файле.Кроме того, если контейнер выходит из строя, память окаменелости теряется, поскольку у него есть только база данных в памяти.

Я ожидаю, что это процесс, в котором я могу легко заменить INI-файл.Например, контейнер уже знает файл (все более новые версии .ini-файла будут иметь одинаковые имена) во время сборки или что-то в этом роде.Если контейнер не работает, он может снова найти файл самостоятельно.И, как я уже упоминал, мне нужно изменить .ini-файл во время выполнения.Затем контейнер, или, если быть более точным, приложение SpringBoot должно автоматически распознавать это изменение.По моему мнению, изменение файла может быть выполнено с помощью вызова REST, который хранит файл в любом месте контейнера или в месте, где ему разрешено писать, потому что classpath не работает.

1 Ответ

0 голосов
/ 16 апреля 2019

Поскольку ваш вопрос содержит тег "kubernetes", я постараюсь ответить вам в контексте этого конкретного оркестровщика контейнеров.

Функция, которую вы ищете, называется ConfigMap в Kubernetes.

Думайте об этом как о парах ключ-значение, созданных из источника данных (в вашем случае файл конфигурации ini).

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

Затем вы можете использовать данные ConfigMap двумя способами внутри ваших контейнеров:

  1. В качестве переменных среды контейнера
  2. Как заполненный том, смонтированный внутри контейнера по определенному пути

Здесь важно отметить, что смонтированные ConfigMaps обновляются автоматически.Если вы заинтересованы в этой концепции, пожалуйста, прочитайте больше об этом здесь .

...