Docker 数据卷入门:-v 挂载的三种写法与选坑指南

举报
yd_221252513 发表于 2026/10/29 19:46:28 2026/10/29
【摘要】 容器一删数据就没?一文讲清 Docker -v 的三种挂载写法:匿名卷、命名卷、绑定挂载各自的适用场景与常见误解,附选型一句话法则。

从一个经典事故说起

容器一删,数据全没——这是每个 Docker 新手几乎必踩的坑。容器里的文件系统虽然可写,但它是“临时的”:docker rm 之后,你在容器里写过的配置、上传的文件、积累的数据库,都会跟着容器一起消失。想让数据活得比容器久,就要用数据卷(Volume)和挂载。

-v 的三种写法

第一种:匿名卷。docker run 里只写容器内路径,比如 -v /var/lib/mysql。Docker 会在宿主机 /var/lib/docker/volumes 下自动生成一个随机名字的目录替你保管数据。好处是省事,坏处是名字难认、批量清理时容易误删,不适合需要长期管理的数据。

第二种:命名卷。写法是 -v mydata:/var/lib/mysql,冒号前面是自己起的名字。名字固定、便于备份和跨容器复用,是生产环境管理数据库数据常见的选择。注意一个易错点:宿主机卷为空时首次启动,Docker 会把镜像里该路径的默认内容复制进卷;卷里已有内容时则反过来“压住”镜像内容,很多人在这里误解了初始化方向。

第三种:绑定挂载。直接挂宿主机目录,比如 -v /opt/app/conf:/etc/nginx。它最直观,适合配置文件、代码热更新这类“我要亲自管”的场景。代价是路径强依赖宿主机环境和权限,换台机器就可能失效;某些安全模块(SELinux/AppArmor)还会让挂载文件读不了,需要加 :ro 只读或额外打标。

选型一句话法则

  • 数据库和有状态服务 → 命名卷;
  • 配置文件和本地代码 → 绑定挂载;
  • 一次性测试、不关心数据 → 匿名卷随缘。

再记两条通用法则:容器可写层不是存储,放进去的东西随时可能蒸发;docker system prune 会顺手清掉悬空卷,按下回车前想清楚里面有没有你舍不得的数据。

小结

数据卷的本质,是“把数据的生命周期和容器解绑”。三种写法分别对应“谁在管数据”——Docker 管、我管、随便——想清楚这一点,绝大多数持久化需求都能一眼选出正确姿势。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。