你是否遇到过打包好的Java
项目编译成Docker
镜像,当你的配置文件需要做改动,这个时候你就需要在本地更新配置文件重新打包成Docker
镜像,最常见的就是SpringBoot
项目,配置文件一般都在application.yml
中,如果你所做的改动非代码文件仅仅是配置文件,本文将告诉你你如何将配置文件挂载到宿主机下来快速更改配置文件,省去大量无意义的时间去打包镜像。
CentOS 7
20.10.10
1.8
在讲解Docker
运行Java
项目挂载使用外部配置文件之前,需要了解SpringBoot
的配置文件加载路径优先级~
优先级(从高到低):
工程根目录:./config/
工程根目录:./
classpath:/config/
classpath:/
当Springboot
打成JAR
包(不包含配置文件),读取外部配置文件application.properties
时,可以选择:
1.把application.properties
放在在项目名.jar
的同级目录下。
2.在项目名.jar同级目录,创建一个config
文件夹,把application.properties
放进去。
例如这里有一个SpringBoot
的项目,里面的配置的默认端口是8081
运行一下,看看端口(port
)确实是8081
⛺项目目录
可以看到项目目录下当前仅仅只有一个项目jar包
☘️此时我们随便采取一种方案来让SpringBoot
读取外部文件,这里演示我就是要使用方案一来演示~
️新创建一个SpringBoot
的配置文件application.properties
,端口改为8888
来作为测试
将配置文件丢到项目目录下
这个时候我们在重新运行,可以看到端口是8888
,说明SpringBoot
成功读取到外部配置文件
了解完SpringBoot
如何读取外部文件之后,是不是大概能想到一种方案:
假如我们的jar包
在容器app1
的tmp
目录下,我们将tmp
目录映射挂载到宿主机的tmp
目录下
【也就是说:Dockerfile
的入口点是ENTRYPOINT java -jar /tmp/app.jar
】
此时我们在宿主机的tmp
目录下添加application.properties
配置文件即可
接下来测试一下这个思路是否可行~
编写Dockerfile
文件
FROM java:8-alpine
ENTRYPOINT java -jar /tmp/app.jar
提前将jar
包和配置文件放置在宿主机的tmp
目录中,会自动映射到容器内部的tmp
目录
测试创建并运行容器【配置文件中的端口是8888
,如果成功读取到控制台会显示8888
】
很遗憾,这种思路对了,但是并没有起到效果~
解决上面的办法就是在Dockerfile
的入口点加上
--spring.config.additional-location=/tmp/application.properties
项⽬使⽤容器内tmp
⽬录下的application.properties
配置⽂件
FROM java:8-alpine
ENTRYPOINT java -jar /tmp/app.jar --spring.config.additional-location=/tmp/application.properties
此时删掉上面创建不生效的容器和镜像,使用新的Dockerfile
入口点
此时SpringBoot
成功读取到外部配置文件,以后再需要修改配置文件,直接在宿主机中修改即可。