容器数据卷持久化存储大模型与网站数据实操
为什么数据卷是容器存储的刚需
刚接触 Docker 时,你可能会遇到一个常见问题:容器一删,里面的大模型权重文件或网站数据库全没了。
这是因为容器默认的存储层在重启或删除后就会丢失。容器数据卷持久化存储大模型与网站数据 就是解决这个痛点的标准方案。
数据卷(Volume)是 Docker 管理的共享存储,独立于容器生命周期,删除容器也不会影响数据。
准备条件:确认 Docker 环境
操作前请确保服务器已安装 Docker。
命令行输入 docker --version 能看到版本号。
如果还没安装,可以参考官方文档或使用一键安装脚本(如 curl -fsSL https://get.docker.com | bash)。
- 检查 Docker 运行状态:
sudo systemctl status docker或docker info。 - 如果是在宝塔面板中,可以通过软件商店安装 Docker 管理器,然后使用终端操作。
创建并挂载数据卷:分两种场景操作
场景一:存储大模型文件(如 Ollama、Llama 2)
假设你要运行 Ollama 容器并提供本地大模型服务,模型文件通常下载到容器内的 /root/.ollama。
为了持久化,我们先用命令创建一个独立数据卷:
docker volume create ollama_data
然后启动容器时挂载该卷:
docker run -d --name ollama -v ollama_data:/root/.ollama -p 11434:11434 ollama/ollama
解释:-v ollama_data: 表示将
/root/.ollamaollama_data 卷挂载到容器的 /root/.ollama 目录,
容器写入的模型文件实际上保存在宿主机 Docker 管理的存储目录下(通常是 /var/lib/docker/volumes/ollama_data/_data)。
场景二:存储网站数据(WordPress + MySQL)
网站一般至少两个数据源:数据库和上传文件。
以 WordPress 为例,我们需要两个卷:
docker volume create wp_db
docker volume create wp_files
启动 MySQL 挂载数据库卷:
docker run -d --name db -v wp_db:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=yourpass -e MYSQL_DATABASE=wordpress mysql:8
启动 WordPress 挂载文件卷:
docker run -d --name wp -v wp_files:/var/www/html --link db -p 8080:80 wordpress:6
完成后访问 http://你的IP:8080 即可安装网站。
注意文件卷挂载到容器内 WordPress 根目录,主题、插件、上传图片都会保留。
避坑指南:这四个问题最容易栽跟头
- 卷名冲突:创建卷时如果已存在同名卷会报错,用
docker volume ls检查。 - 权限问题:大模型容器以非 root 用户运行,挂载卷后目录权限可能不足。可添加
chown或在 docker run 时加上--user参数。 - Windows/Mac 路径:若在本地开发,Bind Mount 更直观,但生产环境推荐 Volume。切勿直接用宿主机路径挂载,容易因权限错误导致容器无法写入。
- 数据库初始化:第一次挂载空卷启动 MySQL,它会在挂载目录初始化数据库。如果卷已存在非空目录,可能会覆盖或者报错。建议首次用新卷。
验证持久化是否生效
测试方法很简单:
- 删除容器:
docker rm -f ollama(或wp) - 用同一卷启动一个新容器:
docker run -d --name ollama2 -v ollama_data:/root/.ollama -p 11434:11434 ollama/ollama - 进入容器检查之前下载的模型文件是否还在:
docker exec -it ollama2 ls /root/.ollama - 如果是 WordPress,重新启动后访问网站,帖子、图片应该都与删除前一致。
也可以直接查看宿主机上卷的实际内容(不推荐线上操作,但验证可行): sudo ls /var/lib/docker/volumes/ollama_data/_data
数据迁移与备份
数据卷可以轻松迁移到另一台服务器。
导出为 tar 包:
# 先创建临时容器并挂载卷,然后将卷内容打包
docker run --rm -v ollama_data:/data -v $(pwd):/backup busybox tar czf /backup/ollama_backup.tar.gz -C /data .
得到 ollama_backup.tar.gz 后复制到新服务器,再解压到新卷:
docker volume create new_ollama_data
docker run --rm -v new_ollama_data:/data -v $(pwd):/backup busybox tar xzf /backup/ollama_backup.tar.gz -C /data
网站数据同理,数据库卷备份时建议先停止 MySQL 容器,避免写入不完整。
写在最后
容器数据卷持久化存储大模型与网站数据是容器运维的基础技能,掌握后可以放心升级、迁移容器而不丢失数据。
如果你在操作中遇到卷无法挂载或权限报错,优先检查卷名是否正确以及容器内用户 ID。
推荐多看 docker volume inspect 和 docker logs 的输出,排错会快很多。