编辑docker容器中war文件中的文件

时间:2018-05-19 10:08:41

标签: bash docker environment-variables war

我有一个基于openjdk:8-jre-alpine基本图像的泊坞窗图像。我使用java -jar ...在容器内执行war文件。我的war文件服务于一个Web应用程序,我的war文件conf.json里面有一个文件,我有一些配置设置。我想根据docker容器的环境变量修改一些配置。

例如,我有一个"gateway_url":"some_url"字段,我需要将其更改为"gateway_url":"${gateway_url}"。如果此配置文件不在war文件中,我只会执行类似

的操作

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

在我的入口点脚本中编辑conf.json文件。在这种情况下,我无法直接访问配置文件,因为它位于war文件中。

如何解决此问题?

约束

我不想在我的容器中使用jar实用程序来更新war文件中的文件,因为它会大大增加容器的大小(默认情况下不会出现这种情况)整个JDK安装)。

1 个答案:

答案 0 :(得分:0)

找到解决方案:

这就是我在入口点脚本中所做的:

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

它使用unzipzip实用程序。我必须首先使用zip安装apk add zip,然后我就可以将环境变量添加到docker容器中war文件中的文件中。