【问题标题】:Cant change content of a file using environment variable in docker image at run time无法在运行时使用 docker 映像中的环境变量更改文件的内容
【发布时间】:2018-08-08 08:50:59
【问题描述】:

我正在创建一个将在其中运行 java 应用程序的图像。 Java 应用程序进程创建命令从映像内部的配置文件中获取参数。我想使用环境变量来设置那些配置文件内容。我不知道如何修改这些值。当我只是简单地复制文件时,它只是复制环境变量名称。

FROM base-image
ARG SERVICE=test
ENV SERVICE $SERVICE
COPY runtime.properties /tmp/
RUN chmod 700 /tmp/runtime.properties
# here i am creating java process using those properties

runtime.properties

# few lines
SERVICE_NAME='${SERVICE}'
# few lines

【问题讨论】:

    标签: docker docker-compose containers dockerfile


    【解决方案1】:

    Java 会从字面上读取静态属性文件,并且在运行之前不会对这些文件进行任何插值。有几个选项可供您使用。

    一种是在 Dockerfile 中添加一个步骤来搜索和替换文件中的值。

    FROM java:alpine
    ARG SERVICE=test
    ENV SERVICE $SERVICE
    COPY runtime.properties /tmp/
    RUN sed -i -e 's/${SERVICE}/asd/g' /tmp/runtime.properties 
    RUN chmod 700 /tmp/runtime.properties
    

    另一种选择是将属性文件更改为 java 类并直接读取环境变量。这提供了在代码中为独立运行提供默认值的优势。

    public enum LocalConfig {
        INSTANCE;
    
        private String service = System.getenv("SERVICE") ==null ? "test" : System.getenv("SERVICE");
    }
    

    如果您有很多环境变量,另一个选择是使用 envsubst,这将替换文件中的所有环境变量。但这取决于您的基本图像是什么。 https://www.gnu.org/software/gettext/manual/html_node/envsubst-Invocation.html

    FROM java
    ARG SERVICE=test
    ENV SERVICE $SERVICE
    COPY runtime.properties /tmp/
    RUN envsubst < /tmp/runtime.properties > /tmp/runtime.properties 
    RUN chmod 700 /tmp/runtime.properties
    

    我能想到的最后一个选项是在导入文件后解释环境变量。这里有一个很好的主题:Regarding application.properties file and environment variable

    【讨论】:

      【解决方案2】:

      您可以使用 bash 将环境变量写入 runtime.properties:

      RUN echo "SERVICE_NAME=$SERVICE" > /tmp/runtime.properties
      

      或者如果该文件中已经存在静态内容,则将 > 替换为 >> 以追加。

      【讨论】:

      • 这无济于事,它只是通过仅写入我提供的变量来替换文件中的所有内容。
      • 请再读一遍我的最后一句话。如果要追加而不是覆盖,请使用RUN echo "SERVICE_NAME=$SERVICE" &gt;&gt; /tmp/runtime.properties
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多