
类型:虚拟化技术
简介:基于操作系统层级的虚拟化技术,将软件与其依赖项打包为容器。
很多小伙伴在使用 Docker -v 参数挂载持久化目录时,都会遇到容器重启后数据清空丢失的问题,本质都是卷挂载方式使用错误,导致无法长期保存业务数据。下面为大家整理标准故障原因、规范写法、完整操作流程与旧数据迁移方案。
一、故障现象
容器已配置 -v 目录持久化挂载
每次重启、重建 Docker 容器后,容器内所有业务数据全部清空丢失
二、故障核心原因
1、错误使用匿名数据卷进行持久化
2、Docker 匿名卷没有固定名称,每次重新运行容器都会自动创建全新数据卷
3、新旧卷无法复用,历史数据无法继承,造成重启数据丢失
4、Docker 所有正式持久化场景,必须使用固定名称命名卷,才能重复复用、永久保存数据
三、错误写法 vs 正确标准写法
错误写法(匿名卷,无法复用数据)
docker run -d -v /var/lib/mysql mysql:5.7
正确写法(命名固定卷,持久化永久生效)
docker run -d -v mysql-data:/var/lib/mysql mysql:5.7
四、命名卷标准完整使用流程
提前手动创建固定命名数据卷
docker volume create mysql-data
查看系统所有数据卷,区分命名卷与匿名无用卷
docker volume ls
查看卷详情,确认宿主机真实数据存放路径
docker volume inspect mysql-data
五、已有匿名卷重要数据迁移方案
若已经使用匿名卷,且容器内存在不可丢失业务数据,按以下步骤无损迁移:
查看当前所有匿名数据卷
docker volume ls
停止对应容器,防止数据读写冲突、迁移损坏
docker stop 你的容器名
将容器内数据完整备份到宿主机本地目录
docker cp 你的容器名:/容器内数据路径 ./data-backup
新建规范固定命名卷
docker volume create 固定卷名
使用全新命名卷启动正常业务容器
docker run -d \
–name 新容器名 \
-v 固定卷名:/容器内数据路径 \
你的镜像名
将备份数据恢复至新容器挂载目录
docker cp ./data-backup/. 新容器名:/容器内数据路径
清理系统无用废弃卷,释放服务器磁盘空间
注:务必确认数据备份无误后再执行
docker volume prune

