Редактировать файл внутри файла war в контейнере Docker - PullRequest
0 голосов
/ 19 мая 2018

У меня есть образ докера, основанный на openjdk:8-jre-alpine базовом изображении.Я выполняю файл войны внутри контейнера с java -jar ....Мой war-файл обслуживает веб-приложение, и внутри моего war-файла conf.json есть файл, в котором у меня есть некоторые настройки конфигурации.Я хочу изменить некоторые конфигурации на основе переменных среды контейнера Docker.

Например, у меня есть поле для "gateway_url":"some_url", которое мне нужно изменить на "gateway_url":"${gateway_url}".Если бы этот конфигурационный файл не был внутри военного файла, я бы просто выполнил что-то вроде

awk -v val="$gateway_url" '{gsub("some_url",val);print}' > conf.json

в моем сценарии точки входа, чтобы отредактировать файл conf.json.В этом случае я не могу получить доступ к файлу конфигурации напрямую, потому что он находится внутри файла war.

Как мне решить эту проблему?

ограничения

Я не хочу использовать утилиту jar внутри моего контейнера для обновления файла внутри файла war, потому что онзначительно увеличивает размер моего контейнера (по умолчанию его нет и поставляется с полной установкой JDK).

1 Ответ

0 голосов
/ 19 мая 2018

Нашел решение:

Это то, что я сделал в моем скрипте точки входа:

zipedit(){
    echo "Usage: zipedit archive.zip folder/file.txt"
    curdir=$(pwd)
    unzip "$1" "$2" -d /tmp
    cd /tmp
    content=$(cat "$2")
    rm -f "$2"
    echo "$content" | awk -v gat="$GAT_URL" -v tam="$TAM_URL" -v prom="$PROMPT_URL" -v ecm="ECM_URL" \
    '{gsub("gat_url",gat);gsub("prompt_url", prom);print}' > "$2" &&
    zip --update "$curdir/$1"  "$2"
    # remove this line to just keep overwriting files in /tmp
    rm -f "$2" # or remove -f if you want to confirm
    cd "$curdir"
}

zipedit application.war base/conf/conf.json

Он использует утилиты unzip и zip.Сначала мне пришлось установить zip, используя apk add zip, а затем я смог добавить переменные среды в файл внутри файла war в контейнере Docker.

...