Docker绑定挂载文件无法通过Spring Boot Web访问的问题
解决Spring Boot + Docker绑定挂载文件无法读取的问题
核心问题:Docker Compose环境变量格式错误
你遇到的FileNotFoundException本质是Spring没有读取到正确的文件路径,问题出在docker-compose.yml的环境变量定义上:
# 错误写法:等号两边有空格 - MYPATH = /app/config/data.txt
Docker Compose中环境变量的等号不能有空格,否则变量名会被识别为MYPATH (带末尾空格),而Spring Boot会将环境变量MYPATH映射为配置项mypath,带空格的变量名无法被@Value("${mypath}")匹配,导致Spring还是使用application.yml里的Windows本地路径,在容器中自然找不到文件。
修复步骤
修正Docker Compose环境变量格式
将环境变量行改为无空格的写法:environment: - MYPATH=/app/config/data.txt验证路径是否正确加载
在控制器的read()方法中添加日志,确认mypath的值:@GetMapping("/read") public String read() throws IOException { // 添加这行日志 System.out.println("Loaded file path: " + mypath); System.out.println("Reading from txt..."); FileReader fr = new FileReader(mypath); // ... 剩余代码 }启动容器后调用
/read接口,查看容器日志,如果输出的路径是/app/config/data.txt,说明配置已正确加载。额外检查项(可选)
- 如果还是报错,检查容器内文件权限:虽然你能通过bash访问,但Spring进程的用户可能没有读取权限。可以在Dockerfile中添加权限设置:
或者临时添加RUN chmod 644 /app/config/data.txtuser: root到docker-compose的服务配置中测试(生产环境不推荐):services: spring-volume-practice: # ... 其他配置 user: root - 确认宿主机的
./config/data.txt确实存在,Windows系统下注意Docker Desktop的文件共享权限是否开启。
- 如果还是报错,检查容器内文件权限:虽然你能通过bash访问,但Spring进程的用户可能没有读取权限。可以在Dockerfile中添加权限设置:
内容的提问来源于stack exchange,提问作者seroja
相关产品推荐
相关产品推荐

