【问题标题】:External SpringBoot properties file on DockerDocker 上的外部 Spring Boot 属性文件
【发布时间】:2018-03-03 03:55:08
【问题描述】:

我目前正在尝试从我的 Spring Boot 应用程序的默认位置 /src/main/resouces/application.yml 自动外部化我的 application.yml 文件。我知道目前 Spring Cloud Server 是一种很好或首选的方式,但目前这可能不是我的选择。

我目前正在尝试从 .jar 中提取 .yml 文件,然后将其复制到我想要的文件夹中。

不幸的是,我似乎根本没听懂!在某些时候,我尝试运行 RUN ls -lrt /tmp/config,即使我从 COPY 命令收到成功消息,它也始终为空。

这是我的货币设置:

Dockerfile:

FROM openjdk:8-jdk-alpine

VOLUME ["/tmp", "/tmp/config", "/tmp/logs"]

ADD /target/*.jar app.jar

RUN apk add --update unzip && unzip app.jar "*application.yml" && ls -lrt

RUN ls -lrt /BOOT-INF/classes

RUN cp /BOOT-INF/classes/application.yml tmp/config

RUN ls -lrt tmp/config 
# ----> Total 0

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar", "--spring.config.location=file:/tmp/config/application.yml"]

在我的 docker-compose.yml 中,我对上面定义的所有三个 VOLUMES 都有一个映射。

你们知道如何在不让用户在第一次部署时将 .yml 文件拖放到目录中的情况下解决这个问题吗?

最好的问候, 恩里科·贝加莫

【问题讨论】:

  • 为什么不在 compose 中使用环境变量?
  • 或者为什么不把配置留在 jar 文件中?
  • 我害怕在 compose 中使用 env var,因为它可能会开始变得难以维护。另一方面,我同意您将其留在罐子中并根据需要对其进行编辑并重新打包的建议。不幸的是,该项目中的运营人员似乎不想以这种方式处理可能的更新,并且已经开始大惊小怪了。

标签: docker spring-boot


【解决方案1】:

最后,我决定保持简单,并为附加的 application.yml 文件安装一个卷。在运行容器之前,我正在创建目录并将我的新 .yml 文件放在这个目录中,它成功了 :)

FROM openjdk:8-jre-alpine

VOLUME ["/tmp", "/tmp/config", "/tmp/logs"]

ADD /target/*.jar app.jar

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar", "--spring.config.location=classpath:/application.yml,file:/tmp/config/application.yml"]

【讨论】:

  • 谢谢,应该是"-Dspring.config.location=classpath:/application.yml,file:/tmp/config/application.yml"] 不是 --
猜你喜欢
  • 2016-09-15
  • 2020-07-30
  • 2018-02-21
  • 2015-06-26
  • 2015-05-14
  • 2017-08-18
  • 2018-02-25
  • 2018-08-01
相关资源
最近更新 更多