在 docker 容器中编辑 war 文件内的文件
Edit a file inside war file in a docker container
我有一个基于 openjdk:8-jre-alpine
基本图像的 docker 图像。我使用 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 安装)。
找到解决方案:
这是我在入口点脚本中所做的:
zipedit(){
echo "Usage: zipedit archive.zip folder/file.txt"
curdir=$(pwd)
unzip "" "" -d /tmp
cd /tmp
content=$(cat "")
rm -f ""
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}' > "" &&
zip --update "$curdir/" ""
# remove this line to just keep overwriting files in /tmp
rm -f "" # or remove -f if you want to confirm
cd "$curdir"
}
zipedit application.war base/conf/conf.json
它同时使用 unzip
和 zip
实用程序。我必须先使用 apk add zip
安装 zip
,然后我才能将环境变量添加到 docker 容器中的 war 文件内的文件中。
我有一个基于 openjdk:8-jre-alpine
基本图像的 docker 图像。我使用 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 安装)。
找到解决方案:
这是我在入口点脚本中所做的:
zipedit(){
echo "Usage: zipedit archive.zip folder/file.txt"
curdir=$(pwd)
unzip "" "" -d /tmp
cd /tmp
content=$(cat "")
rm -f ""
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}' > "" &&
zip --update "$curdir/" ""
# remove this line to just keep overwriting files in /tmp
rm -f "" # or remove -f if you want to confirm
cd "$curdir"
}
zipedit application.war base/conf/conf.json
它同时使用 unzip
和 zip
实用程序。我必须先使用 apk add zip
安装 zip
,然后我才能将环境变量添加到 docker 容器中的 war 文件内的文件中。