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

问题描述 投票:0回答:1

我有一个基于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文件中。

我该如何解决这个问题?

constraints

我不想在我的容器中使用jar实用程序来更新war文件中的文件,因为它大大增加了我的容器的大小(默认情况下不存在,并且整个JDK安装都有)。

bash docker environment-variables war
1个回答
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文件中的文件中。

© www.soinside.com 2019 - 2024. All rights reserved.