如何读取Docker容器内的文件?Spring应用读容器文件报FileNotFoundException
根因分析
你执行docker cp foo.txt container_id:/foo.txt时,文件是被存放到容器的**系统根目录/**下,而Spring应用进程在容器中运行时的默认工作目录(WORKDIR)不是根目录,你写的相对路径"foo.txt"会从应用进程的工作目录下寻址,自然会抛出文件找不到异常。
可用解决方案
- 方案1:直接用根目录绝对路径读取
直接修改读取代码的路径为根目录绝对路径即可,和本地用C:/Users开头的绝对路径逻辑完全一致:BufferedReader br = new BufferedReader(new FileReader("/foo.txt")); - 方案2:将文件拷贝到应用的工作目录下
先执行命令查看容器内Spring应用的运行工作目录:
假设返回的工作目录是docker exec 你的容器ID pwd/app,就将拷贝命令修改为:
原有读取代码不需要修改即可正常运行。docker cp foo.txt 你的容器ID:/app/foo.txt - 方案3:在Dockerfile中统一配置工作目录(适合Jenkins自动部署场景)
直接在Spring应用对应的Dockerfile中添加WORKDIR配置,统一工作路径,避免后续路径匹配错误:# 指定应用工作目录 WORKDIR /app # 后续的COPY、ENTRYPOINT等命令都会默认以/app为根路径执行 COPY target/your-app.jar app.jar ENTRYPOINT ["java","-jar","app.jar"]
内容的提问来源于stack exchange,提问作者ivaylo
相关产品推荐
相关产品推荐

