Как динамически настроить файл свойств приложения в docker - PullRequest
2 голосов
/ 11 июля 2020

У меня есть jar-файл, содержащий файл application.properties. можем ли мы настроить IP-адрес и номер порта, а также имя пользователя и пароль при запуске docker изображения

Расположение файла свойств

App / bin / config / application.properties

Ниже приведены application.properties

driverClassName = org.postgresql.Driver
url = jdbc:postgresql://localhost:5432/sakila
username = root
password = root

1 Ответ

0 голосов
/ 12 июля 2020

точка входа - это секрет.

У вас есть два решения:

  • создать изображение для получения этих параметров через переменные среды и позволить ENTRYPOINT вставляет их внутрь App/bin/config/application.properties

  • проектирует изображение для прослушивания каталога. Если этот каталог содержит *.properties файлов, ENTRYPOINT соберет эти файлы и объединит их в один файл и добавит содержимое с помощью App/bin/config/application.properties

Оба решения имеют одинаковый файл Dockerfile

From java:x

COPY jar ...
COPY myentrypoint /
ENTRYPOINT ["bash", "/myentrypoint"]

Но не тот же ENTRYPOINT (myentrypoint)

решение A - точка входа:

#!/bin/bash
# if the env var DB_URL is not empty
if [ ! -z "${DB_URL}" ]; then
  
   echo "url=${DB_URL}" >> App/bin/config/application.properties
fi
# do the same for other props
#...
exec call-the-main-entry-point-here $@

Чтобы создать контейнер из этого решения:

 docker run -it -e DB_URL=jdbc:postgresql://localhost:5432/sakila myimage

решение B - точка входа:

#!/bin/bash

# if /etc/java/props.d/ is a directory
if [ -d "/etc/java/props.d/" ]; then
   cat /etc/java/props.d/*.properties
   awk '{print $0}' /etc/java/props.d/*.properties >> App/bin/config/application.properties
fi

#...
exec call-the-main-entry-point-here $@

Чтобы создать контейнер из этого решения:

 docker run -it -v ./folder-has-props-files:/etc/java/props.d myimage
...