前因后果
- 需求:需要给HR写一个自动祝福生日的机器人,就用了SpringBoot构建了一个项目,之后打包成jar,构建docker 镜像,部署。
- 问题:因为,员工有关的信息,是无法通过某一个接口获取到的,所以是需要每隔一段时间上传一下 员工信息表,更新一下数据的。问题就出现再这个上传操作上,在本地好好的,部署到docker上就不行了,一上传,就提示你,文件路径不存在,无法上传问题。
- 结论:排查发现,我们springBoot打包成jar后,部署到docker中,是无法直接往jar中写入文件的,因为jar文件就是一个文件,是无法进入里面操作的,所以需要,另外操作,构建镜像时,添加员工信息到指定目录,后面文件的读写都是直接 放在镜像文件中操作,不经过jar包了。
解决方案
编写docker文件
构建镜像的时候加入demo.xlsx 文件,demo.xlsx文件和jar包在同一个目录下,当然你也可以,自己指定一个存放文件的目录
都是在当前路径下build images
FROM openjdk:8-jre-alpine
ADD robot-service.jar /root/startup/app.jar # 添加jar到当前目录下,重命名为app
ADD demo.xlsx /root/startup/demo.xlsx # 同理
EXPOSE 8080
WORKDIR /root/startup/ # 切换到这个目录下,类似于 cd 操作
ENTRYPOINT ["java","-jar","app.jar"]
code 规范
你可以直接指定从 如下路径下读取和删除以及新增你的文件就不会有问题了,就绕过了jar包了
/root/startup/文件名