我似乎无法通过 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
那么该值将被正确注入(inject)。
事实上,如果我执行 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"]
关于java - 变量中的 Dockerfile Spring Boot 属性不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58983936/