目录

Docker Volume 教程:创建、列出、检查和删除 Volume

docker volume 用于管理 Volume。Volume 的概念和用法见 Volume 与数据持久化。

子命令

命令说明常用参数
docker volume create [名称]创建 Volume(不指定名称会生成随机名称)--label 键=值、-d 驱动程序、-o 选项
docker volume ls列出 Volume-f 筛选条件、-q 只列出名称、--format
docker volume inspect 名称显示详细信息-f 模板
docker volume rm 名称...删除 Volume(正在使用的 Volume 无法删除)-f
docker volume prune删除未使用的匿名 Volume-a 包含具名 Volume、-f 不确认、--filter

docker volume ls -f 的筛选条件:dangling=true(没有被任何容器使用)、name=部分名称、label=键=值、driver=local。

创建、写入和读取

$ docker volume create mydata
mydata

$ docker volume ls
DRIVER    VOLUME NAME
local     2bc47e5efc92fb9cbc751a0d25853c6c800d4e4806c256fb7d68fa9dff112fcd
local     6729482c30a3f652c14f542c6f341c811f087fc9626efcfdf00a49a5ae721e2c
local     78297657b68403b39f39940496ce3faf49e6257a11d5103d043077a36261236a
local     a23af26d1da49e018edecb6e29f9be3875fb02e8c50510a40fbb5cf49da94f81
local     mydata

$ docker volume inspect mydata
[
    {
        "CreatedAt": "2026-10-13T05:28:56Z",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/mydata/_data",
        "Name": "mydata",
        "Options": null,
        "Scope": "local"
    }
]

$ docker run --rm -v mydata:/data alpine:3.23 sh -c "echo saved > /data/a.txt"

$ docker run --rm -v mydata:/data alpine:3.23 cat /data/a.txt
saved
  • ls 中除了 mydata,还有几个长串名称的匿名 Volume,它们是先前的容器留下的(例如 postgres 镜像的 VOLUME 声明会自动创建 Volume)。
  • inspect 中的 Mountpoint 是数据在 Docker 主机上的实际位置。
  • 两个不同的容器先后挂载 mydata,第二个容器读到了第一个容器写入的文件:数据保存在 Volume 中,与容器无关。

查找并清理悬空 Volume

$ docker run --rm -v /tmpdata alpine:3.23 true

$ docker volume ls -f dangling=true
DRIVER    VOLUME NAME
local     2bc47e5efc92fb9cbc751a0d25853c6c800d4e4806c256fb7d68fa9dff112fcd
local     6729482c30a3f652c14f542c6f341c811f087fc9626efcfdf00a49a5ae721e2c
local     78297657b68403b39f39940496ce3faf49e6257a11d5103d043077a36261236a
local     a23af26d1da49e018edecb6e29f9be3875fb02e8c50510a40fbb5cf49da94f81
local     mydata

$ docker volume prune -f
Deleted Volumes:
a23af26d1da49e018edecb6e29f9be3875fb02e8c50510a40fbb5cf49da94f81
6729482c30a3f652c14f542c6f341c811f087fc9626efcfdf00a49a5ae721e2c
78297657b68403b39f39940496ce3faf49e6257a11d5103d043077a36261236a
2bc47e5efc92fb9cbc751a0d25853c6c800d4e4806c256fb7d68fa9dff112fcd

Total reclaimed space: 348.9MB
  • -v /tmpdata 只指定容器内的路径,没有指定名称,因此会创建匿名 Volume;删除容器时,--rm 会一并删除它。
  • dangling=true 会列出所有当前没有容器使用的 Volume,包括具名的 mydata。
  • prune -f 只删除了 4 个匿名 Volume,回收了 348.9 MB;具名的 mydata 得以保留。

标签

$ docker volume create --label env=dev tagged
tagged

$ docker volume ls -f label=env=dev
DRIVER    VOLUME NAME
local     tagged

$ docker volume rm mydata tagged
mydata
tagged

为 Volume 添加标签,便于按项目或环境筛选和清理,例如 docker volume prune --filter label=env=dev。

相关章节

动手练习

练习:创建一个带有 project=demo 标签的 Volume,然后用一条命令删除所有带此标签且未被使用的 Volume(包括具名 Volume)。

答案
docker volume create --label project=demo demo_data
docker volume prune -a -f --filter label=project=demo

-a 会将具名 Volume 也纳入删除范围,--filter 则限定只删除带有此标签的 Volume。

常见问题

一定要先运行 docker volume create 吗?

不用。docker run -v 名称:/路径 使用不存在的 Volume 时会自动创建。先创建的好处是可以添加标签或驱动程序选项。

docker volume prune 会删除我的数据库吗?

Docker 23 之后,docker volume prune 只删除**没有被任何容器使用的匿名 Volume**,不会删除具名 Volume。只有 docker volume prune -a 才会删除未使用的具名 Volume,实测见 [清理硬盘空间](/zh/docker/cleanup/)。

如何备份 Volume?

使用一个临时容器,同时挂载 Volume 和主机文件夹,再用 tar 打包,示例见 [Volume 与数据持久化](/zh/docker/volumes/)。

更新于 2026年10月14日