首页 > 解决方案 > 来自变量的Dockerfile Spring Boot属性不起作用

问题描述

我似乎无法通过我的 Dockerfile 中的变量让 Spring Boot 属性起作用。这就是我正在做的事情:

ENTRYPOINT exec java -Dapp-version=$app_version -jar /app.jar

如果我RUN echo "App Version: $app_version"在我的 Dockerfile 中进行操作,那么我会得到正确的输出,例如App Version: 1.70.0.

如果我像这样手动放置版本:ENTRYPOINT exec java -Dapp-version=1.70.0 -jar /app.jar那么该值被正确注入。

事实上,如果我这样做RUN echo "ENTRYPOINT exec java -Dapp-version=$app_version -jar /app.jar",我会得到类似的输出

Step 9/10 : RUN echo "ENTRYPOINT exec java -D******ion=$app_version -jar /app.jar"
 ---> Running in b6c3cd9bb69a
ENTRYPOINT exec java -D******ion=1.70.0 -jar /app.jar

当我使用 Dockerfile 变量时,Spring 内部的值被设置为空字符串。当我将它硬编码为 1.70.0 时,它被正确设置。我错过了什么?

我尝试了许多不同的方法,包括使用 {}、引号等。

编辑:添加 Dockerfile

FROM java:8
ARG app_version

RUN echo -------------------
RUN echo "App Version: $app_version"
RUN echo -------------------

VOLUME /tmp
COPY ./build/libs/mango-sticky-rice-1.0.0-SNAPSHOT.jar /app.jar
RUN bash -c 'touch /app.jar'

ENTRYPOINT exec java -Dapp-version=$app_version -jar /app.jar

标签: javaspring-bootdockerdockerfile

解决方案


这个答案有效:https ://stackoverflow.com/a/49889134/3088642 。这是我的 Dockerfile 的样子:

FROM java:8
ARG app_version

RUN echo -------------------
RUN echo "App Version: ${app_version}"
RUN echo -------------------

VOLUME /tmp
COPY ./build/libs/mango-sticky-rice-1.0.0-SNAPSHOT.jar /app.jar
RUN bash -c 'touch /app.jar'

RUN echo "#!/bin/bash \n java -Dapp-version=${app_version} -jar /app.jar" > ./entrypoint.sh
RUN chmod +x ./entrypoint.sh

RUN cat ./entrypoint.sh

ENTRYPOINT ["./entrypoint.sh"]

推荐阅读