如何部署新版ASP.NET应用与Docker且不删除已上传的文件
问题原因
你上传的静态文件默认存储在Docker容器的可写层,每次部署时执行docker rm删除旧容器会同步清空容器可写层的所有数据,因此静态文件会丢失。另外你当前脚本中-v testap参数配置不完整,仅指定了卷名未绑定容器内的存储路径,该卷并未实际挂载到你的wwwroot目录,无法起到数据持久化的作用。
解决方案
你只需要将容器内的wwwroot目录挂载到宿主机的持久化存储中即可,提供两种常用方案:
方案1:使用Docker命名卷持久化(推荐Docker原生管理)
- 先创建专属的命名卷存储静态文件:
sudo docker volume create testap-wwwroot
- 修改部署脚本的挂载参数,将命名卷绑定到容器内的
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:绑定宿主机本地目录(方便直接访问管理静态文件)
- 先在宿主机创建专属存储目录:
sudo mkdir -p /data/testap/wwwroot # 若容器内应用无写入权限,可调整目录权限(生产环境建议匹配容器内运行用户uid更安全) sudo chmod 777 /data/testap/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 /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
相关产品推荐
相关产品推荐

