Docker部署文件上传Web服务问题:服务器无法找到上传文件
问题分析与解决方案
关于存储目录选择
必须更换wwwroot作为存储目录,原因有二:
- wwwroot是应用程序内置目录,容器重启或重新构建镜像时,该目录内的文件会被覆盖丢失。
- 独立存储目录更适合与Docker卷绑定,实现文件持久化,避免数据丢失。
核心问题:路径不匹配导致文件找不到
你的配置存在两处路径不一致的问题:
- Dockerfile中创建了
/uploads目录,但docker-compose里将卷挂载到了容器的/Upload目录,两者不对应。 - 代码本地运行时存储到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-localhostMountpoint字段就是服务器上的实际存储路径,直接访问该路径即可看到上传的文件。
内容的提问来源于stack exchange,提问作者Thiago Santos
相关产品推荐
相关产品推荐

