我有一个基于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安装)。
答案 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
它使用unzip
和zip
实用程序。我必须首先使用zip
安装apk add zip
,然后我就可以将环境变量添加到docker容器中war文件中的文件中。