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

Docker部署文件上传Web服务问题:服务器无法找到上传文件

问题分析与解决方案

关于存储目录选择

必须更换wwwroot作为存储目录,原因有二:

  • wwwroot是应用程序内置目录,容器重启或重新构建镜像时,该目录内的文件会被覆盖丢失。
  • 独立存储目录更适合与Docker卷绑定,实现文件持久化,避免数据丢失。

核心问题:路径不匹配导致文件找不到

你的配置存在两处路径不一致的问题:

  1. Dockerfile中创建了/uploads目录,但docker-compose里将卷挂载到了容器的/Upload目录,两者不对应。
  2. 代码本地运行时存储到wwwroot,部署到容器后若未修改路径,文件会存到容器内的/app/wwwroot(因WORKDIR设置为/app),该目录未挂载卷,文件仅存在于容器内部,服务器主机无法直接访问,且容器重启后丢失。

修复步骤

1. 统一存储路径配置

方式一:调整docker-compose卷挂载路径

修改docker-compose.yml中的volumes配置,让卷挂载到Dockerfile创建的/uploads目录:

services:
  upload-localhost:
    # 其他配置不变
    volumes:
      - upload-localhost:/uploads

volumes:
  upload-localhost:
    driver: local

方式二:调整Dockerfile的目录创建命令

如果想保留docker-compose里的/Upload路径,修改Dockerfile的final阶段:

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
RUN mkdir /Upload  # 改为和docker-compose一致的目录
ENV ASPNETCORE_URLS http://*:6000
ENTRYPOINT ["dotnet", "UploadPictureLocalHost.dll"]

2. 修改代码中的存储路径

将代码中保存文件的路径改为容器内的统一路径(比如/uploads或/Upload,与上述配置保持一致),避免硬编码本地的wwwroot路径。

3. 验证文件存储

  • 重新构建镜像并启动容器:
    docker-compose build
    docker-compose up -d
    
  • 上传文件后,进入容器查看文件是否存在:
    docker exec -it upload-test ls /uploads  # 替换为你的实际存储目录
    
  • 如果容器内有文件,想在服务器主机查看,执行以下命令找到卷的实际路径:
    docker volume inspect upload-localhost
    
    输出中的Mountpoint字段就是服务器上的实际存储路径,直接访问该路径即可看到上传的文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 23:27:32