我似乎无法通过Dockerfile中的变量让Spring启动属性工作。这就是我正在做的:
ENTRYPOINT exec java -Dapp-version=$app_version -jar /app.jar
如果我在我的 Dockerfile 中RUN echo "App Version: $app_version"
,那么我会得到正确的输出,如 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
这个答案奏效了: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"]