【问题标题】:Edit a file inside war file in a docker container在 docker 容器中编辑 war 文件中的文件
【发布时间】:2018-10-29 15:33:51
【问题描述】:

我有一个基于 openjdk:8-jre-alpine 基础镜像的 docker 镜像。我使用java -jar ... 在容器内执行一个war 文件。我的战争文件服务于一个 Web 应用程序,我的战争文件 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 安装一起提供)。

【问题讨论】:

    标签: bash docker environment-variables war


    【解决方案1】:

    找到解决方案:

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

    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 实用程序。我必须先使用apk add zip 安装zip,然后才能将环境变量添加到docker 容器的war 文件中的文件中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-09
      • 2015-08-25
      • 1970-01-01
      • 1970-01-01
      • 2022-07-02
      • 1970-01-01
      • 2015-04-09
      • 2015-03-19
      相关资源
      最近更新 更多