Tam*_*san 4 containers docker dockerfile docker-compose
我正在创建一个将在内部运行 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
Run Code Online (Sandbox Code Playgroud)
运行时属性
# few lines
SERVICE_NAME='${SERVICE}'
# few lines
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
另一种选择是将属性文件更改为java类并直接读取环境变量。这提供了在独立运行的代码中具有默认值的优点。
public enum LocalConfig {
INSTANCE;
private String service = System.getenv("SERVICE") ==null ? "test" : System.getenv("SERVICE");
}
Run Code Online (Sandbox Code Playgroud)
如果您有大量环境变量,另一个选择是使用 envsubst,这将替换文件中的所有环境变量。但这取决于您的基础映像是什么。https://www.gnu.org/software/gettext/manual/html_node/envsubst-Inspiration.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
Run Code Online (Sandbox Code Playgroud)
我能想到的最后一个选项是在导入文件后解释环境变量。这里有一个很好的线程:关于 application.properties 文件和环境变量
| 归档时间: |
|
| 查看次数: |
8462 次 |
| 最近记录: |