You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署Spring Boot项目后API上传文件找不到保存位置如何解决

问题根源与修复方案

核心认知误区

  • Docker容器拥有完全独立的隔离文件系统,默认无法直接访问宿主机的本地文件路径。配置的E:uploadedFilesOfMyProject是Windows宿主机的路径,容器内部不存在Windows盘符结构,无法识别该路径,上传的文件会被写入容器内部的临时文件系统,宿主机自然无法查看。
  • 容器的文件系统是临时存储,容器重启或销毁后,内部存储的所有上传文件会全部丢失,不可直接用于生产环境存储上传资源。

配置错误点

  1. 上传路径未适配容器运行环境:容器内一般使用Linux风格的路径,Windows盘符路径无法被识别。
  2. 缺失Docker卷挂载配置:未将容器内的上传目录映射到宿主机目录,导致文件仅保存在容器内部。
  3. application.properties中本地数据库URL配置为localhost,虽已被docker-compose的环境变量覆盖不影响运行,仍属于冗余错误配置。

完整修复方案

修改docker-compose.yml的API服务配置,增加上传路径的环境变量覆盖和卷挂载规则,无需改动原有application.properties代码:

version: '3.1'
services:
  API:
    image: 'myJar.jar'
    ports:
      - "8080:8080"
    depends_on:
      PostgreSQL:
        condition: service_healthy
    environment:
      - SPRING_DATASOURCE_URL=jdbc:postgresql://PostgreSQL:5432/myDB
      - SPRING_DATASOURCE_USERNAME=myusername
      - SPRING_DATASOURCE_PASSWORD=mypassword
      - SPRING_JPA_HIBERNATE_DDL_AUTO=update
      # 覆盖上传路径为容器内的Linux标准路径
      - FILE_UPLOAD_DIR=/app/uploaded-files
    # 卷挂载配置:左侧为宿主机路径,右侧为容器内路径
    volumes:
      - E:/uploadedFilesOfMyProject:/app/uploaded-files

  PostgreSQL:
    image: postgres
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_PASSWORD=mypassword
      - POSTGRES_USER=myusername
      - POSTGRES_DB=myDB
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U myusername"]
      interval: 10s
      timeout: 5s
      retries: 5

配置注意事项

  • Windows宿主机路径使用/作为分隔符,避免转义字符导致的路径识别错误
  • 提前创建宿主机E:/uploadedFilesOfMyProject目录,并开放读写权限,避免容器写入时抛出权限异常
  • 配置完成后重启docker-compose服务,后续上传的文件会同步存储到宿主机对应目录

验证方法

执行以下命令可进入运行中的API容器,查看内部存储的上传文件:
docker exec -it <API服务容器ID/名称> ls /app/uploaded-files

内容的提问来源于stack exchange,提问作者mohsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 06:06:04