docker volume ls 是什么
docker volume ls 列出本地数据卷及其驱动。数据卷由 Docker 管理,生命周期独立于容器:删容器不等于删卷。默认的 local 驱动物理位置在 /var/lib/docker/volumes 下,每个卷一个子目录。相比 bind mount,数据卷不依赖宿主目录结构,跨环境迁移与权限问题都更少,是持久化数据的首选方式。
基本信息
| 常用参数 | -q 只输出名称;--filter dangling=true 过滤未被容器的卷 |
|---|---|
| 默认驱动 | local,数据实际位于 /var/lib/docker/volumes/卷名/_data |
| 匿名卷 | 用 -v /data 未指定名字时随机生成一长串 ID 作为卷名 |
| 占用统计 | docker system df -v 可看每个卷的大小与引用容器 |
| 回收方式 | docker volume rm 卷名,或清理时用 --volumes 一并处理 |
典型使用场景
- 持久化数据:数据库数据目录挂数据卷,容器重建数据仍在
- 多容器共享:多个容器挂同一具名卷,共享上传目录或缓存
- 卷泄漏排查:用 dangling 过滤找出已无容器引用的历史卷
- 容量巡检:结合 system df -v 定位异常膨胀的卷
- 环境重建:确认无用卷后批量删除,释放磁盘空间
常用示例
常用示例
docker volume ls # 列出全部数据卷
docker volume ls --filter dangling=true # 只看没有容器引用的卷
docker volume ls --format "{{.Name}} {{.Driver}}" # 自定义输出,便于脚本处理
docker volume inspect mydata # 查看卷的挂载点与创建时间
docker volume rm mydata # 删除指定卷(需先停止引用它的容器)卷与绑定挂载对比
| 维度 | 数据卷 | 绑定挂载 |
|---|---|---|
| 管理方 | 由 Docker 统一管理 | 由使用者自行管理宿主路径 |
| 默认路径 | /var/lib/docker/volumes/卷名/_data | 宿主任意路径 |
| 跨宿主迁移 | 较容易,与宿主结构解耦 | 需同步宿主目录与权限 |
| 权限问题 | 较少,由 Docker 处理 | 需处理 uid/gid 与 SELinux |
| 清理方式 | docker volume rm | 直接删宿主目录 |
数据卷不会随容器删除自动回收:docker rm -v 只删除匿名卷,具名卷必须显式 docker volume rm。闲置卷是磁盘被悄悄占满的常见来源,建议季度清理一次。
用 -v /data 这种不写冒号与卷名的写法会生成匿名卷,名字是一长串随机 ID,事后很难判断用途与归属,也难以安全删除。生产环境应始终使用具名卷。