【问题标题】:Dockerfile Spring Boot property from variable not working来自变量的Dockerfile Spring Boot属性不起作用
【发布时间】: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


【解决方案1】:

这个答案有效: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"]

【讨论】:

    猜你喜欢
    • 2018-12-18
    • 2018-05-25
    • 2016-08-06
    • 2023-02-14
    • 2021-08-28
    • 2019-05-30
    • 2018-08-28
    • 1970-01-01
    • 2017-04-23
    相关资源
    最近更新 更多