【发布时间】:2019-11-21 21:20:01
【问题描述】:
我似乎无法通过我的 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
【问题讨论】:
-
你能粘贴整个 Dockerfile 吗?
-
我更新了我的问题以包含我的 Dockerfile
-
我实际上已经看到了那个答案,并且我的入口点已经设置好了。它正在注入一个空字符串而不是实际版本,因为我的 application.yaml 文件中有一个默认值被覆盖。我的入口点已经在使用 shell 表单了。
-
您是否硬编码了一个值以查看是否在您的 Java 应用程序中被读取?
标签: java spring-boot docker dockerfile