手册

Docker部署外置配置文件无法生效

334
刘溢华
2021-08-03 11:08:48
分享链接

导致不生效原因

1.1  S pring boot 加载配置说明

Spring Boot加载配置文件,默认会从几个固定位置搜索一下看看有没有配置文件


看到这里就明白了后面的两个file:的目录是相对目录,相对的不是jar 包的目录,而是执行java -jar 的目录


1.2  示例说明

java -jar命令启动项目时,只能自动加载执行此命令同级目录的配置文件

假如你的jar包路径为: /usr/apps/app.jar

而你在根目录“/”下执行了:java -jar /usr/apps/app.jar

那么你的配置文件不应该放在 /usr/apps/config 或者/usr/apps/ 下,而是应该放在 或者 /config

解决方案一

把配置文件挂载到docker 容器内执行java -jar 的目录

2.1  查看容器内执行java  -jar 的目录

Docker 执行 java -jar 命令启动时 会有一个固定的相对目录来执行。该相对目录为进入容器看到的目录:

进入容器命令如下:

docker exec -it 容器名称 /bin/bash


进入容器后使用pwd 查看当前文件目录 根据该目录来挂着配置文件

Ø  docker run 如下进行配置文件挂载 

-v /home/applicatiom.yml:/script/application.yml

Ø  docker-compose.yml如下配置文件挂载


解决方案二

配置文件直接挂载到与app.jar包相同的目录,指定spring.config.location属性

java -Xms256m -Xmx512m -jar /opt/eip/bpm-model.jar --spring.config.location=classpath:/config/application.yml,/opt/eip/application-uat.yml



ENTRYPOINT ["sh", "-c", "java -Xms256m -Xmx512m -jar /opt/eip/bpm-model.jar --spring.config.location=classpath:/config/application.yml,/opt/eip/application-uat.yml", "&"]


注意:该方案不用指定active  但是必须指定base模块下的application.yml classpath:/config/application.yml 外部的配置文件 /opt/eip/application-uat.yml


发表评论
评论通过审核后显示。