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

如何部署新版ASP.NET应用与Docker且不删除已上传的文件

问题原因

你上传的静态文件默认存储在Docker容器的可写层,每次部署时执行docker rm删除旧容器会同步清空容器可写层的所有数据,因此静态文件会丢失。另外你当前脚本中-v testap参数配置不完整,仅指定了卷名未绑定容器内的存储路径,该卷并未实际挂载到你的wwwroot目录,无法起到数据持久化的作用。

解决方案

你只需要将容器内的wwwroot目录挂载到宿主机的持久化存储中即可,提供两种常用方案:

方案1:使用Docker命名卷持久化(推荐Docker原生管理)

  1. 先创建专属的命名卷存储静态文件:
sudo docker volume create testap-wwwroot
  1. 修改部署脚本的挂载参数,将命名卷绑定到容器内的wwwroot路径(示例默认容器内wwwroot绝对路径为/app/wwwroot,请根据你实际的应用部署路径调整):
sudo docker pull gitlab.myserver.com:5050/testap/testap-backend
sudo docker stop testap || true && sudo docker rm testap || true
sudo docker run -v testap-wwwroot:/app/wwwroot -dit --restart unless-stopped --network="host" -p 5009:5009 -d --name testap gitlab.myserver.com:5050/testap/testap-backend

方案2:绑定宿主机本地目录(方便直接访问管理静态文件)

  1. 先在宿主机创建专属存储目录:
sudo mkdir -p /data/testap/wwwroot
# 若容器内应用无写入权限,可调整目录权限(生产环境建议匹配容器内运行用户uid更安全)
sudo chmod 777 /data/testap/wwwroot
  1. 修改部署脚本的挂载参数:
sudo docker pull gitlab.myserver.com:5050/testap/testap-backend
sudo docker stop testap || true && sudo docker rm testap || true
sudo docker run -v /data/testap/wwwroot:/app/wwwroot -dit --restart unless-stopped --network="host" -p 5009:5009 -d --name testap gitlab.myserver.com:5050/testap/testap-backend

补充说明

  • 你当前脚本同时配置了--network="host"和-p 5009:5009,host网络模式下端口映射规则不会生效,可按需删除其中一个冗余配置。
  • 请务必将挂载参数中/app/wwwroot替换为你容器内实际的wwwroot目录绝对路径,否则挂载不生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:06:03