【发布时间】: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