Docker容器数据卷持久化教程

为什么要做Docker数据卷持久化?


初学者常发现:容器删掉后,里面的数据库、配置文件也一起消失了。Docker容器数据卷持久化就是为了解决这个问题——把容器内的数据存到宿主机上,让数据独立于容器生命周期。

下面我会用最简单的方式,带你从零实现。


环境准备:确保Docker已安装并启动


打开终端(Linux/macOS)或PowerShell(Windows),输入:


docker --version

如果能看到版本号,例如Docker version 24.0.7,说明已安装。

如果没有,先去Docker官网下载安装。


创建一个测试容器作为示例:


docker run -d --name my_nginx nginx:alpine

这个命令会拉取一个轻量级Nginx并后台运行。

接下来我们会让它的网页目录挂载到宿主机上。


方法一:绑定挂载(Bind Mount)——直接映射宿主机目录


绑定挂载就是把宿主机的某个文件夹“注入”到容器中。

假设你想把当前目录下的html文件夹当作Nginx的网站根目录。



  1. 在宿主机上创建文件夹:


   mkdir ~/myweb && cd ~/myweb
echo "

Hello, Docker Volume!

" > index.html


  1. 启动容器时加上-v参数:


   docker run -d --name my_web -v $(pwd):/usr/share/nginx/html:ro -p 8080:80 nginx:alpine


  • $(pwd):当前目录路径(Windows下用绝对路径如D:/myweb

  • /usr/share/nginx/html:容器内Nginx的网页目录

  • :ro:只读挂载(可选,不加则为读写)



  1. 访问 http://localhost:8080,你会看到刚才写的HTML内容。修改宿主机上的index.html,刷新页面就会同步变化。


方法二:Docker卷(Volume)——推荐持久化方案


Docker卷由Docker管理,比绑定挂载更安全、跨主机迁移更方便。

创建并使用命名卷的步骤:



  1. 创建卷:


   docker volume create mydata


  1. 启动容器时挂载卷:


   docker run -d --name my_data_app -v mydata:/data alpine sleep 3600

容器会把写入/data的文件保存到卷中。



  1. 验证数据:进入容器写个文件:


   docker exec -it my_data_app sh -c "echo 'persistent data' > /data/test.txt"


  1. 删除容器再重新使用同一个卷:


   docker rm -f my_data_app
docker run -d --name new_app -v mydata:/data alpine cat /data/test.txt

查看日志:docker logs new_app,会输出persistent data,证明数据还在。


常见问题与避坑



  • 权限问题:绑定挂载时,容器内进程以容器用户运行,可能没有宿主文件夹的写权限。解决办法是在-v后添加:Z(Linux SELinux)或给宿主文件夹开放权限:chmod 777 ~/myweb

  • 路径写错:Windows使用绑定挂载时必须用绝对路径,且目录分隔符用反斜杠或正斜杠?推荐用正斜杠:-v D:/myweb:/usr/share/nginx/html(Docker Desktop会自动转换)。

  • 卷列表清理:用docker volume ls查看所有卷,用docker volume prune删除未使用的卷,避免磁盘空间浪费。

  • 数据卷不持久化:如果容器启动时没有使用-v--mount,数据就只存在于容器内,容器删除就丢失。记得每次新建容器都要挂载卷或绑定目录。


验证Docker容器数据卷持久化效果


最终验证步骤:



  1. 启动一个挂载了卷的数据库容器(例如PostgreSQL):


   docker pull postgres:15
docker run -d --name pg --volume pgdata:/var/lib/postgresql/data -e POSTGRES_PASSWORD=secret postgres:15


  1. 连接并创建一条测试记录(用docker exec -it pg psql -U postgres执行CREATE DATABASE test;)。

  2. 停止并删除容器:docker rm -f pg

  3. 再用同一个卷启动一个新容器:docker run -d --name pg2 --volume pgdata:/var/lib/postgresql/data postgres:15

  4. 进入新容器检查数据库:docker exec -it pg2 psql -U postgres -l,你会看到test数据库依然存在。


这样就完成了完整的Docker容器数据卷持久化实操。

以后要备份数据,只需备份宿主机上的绑定目录或/var/lib/docker/volumes/下的卷文件夹即可。

分享到:
上一篇
Linux进程守护supervisor:零基础用 S
下一篇
服务器迁移上云传统机房教程指南
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意