匿名卷是什么
匿名卷是容器创建时由 Docker 自动生成、名字为一长串随机哈希的数据卷,没有业务含义,也不在编排文件里声明。两种来源最常见:镜像的 Dockerfile 里写了 VOLUME 指令,或者 docker run 时只给了容器内路径(例如 -v /var/cache/nginx)。它解决了「运行目录必须可写」的问题,也带来隐患——容器删掉了,卷仍然留在宿主机上,磁盘占用会悄无声息地增长。
基本信息
| 产生方式 | Dockerfile 的 VOLUME 指令,或 -v 只写容器内路径 |
|---|---|
| 命名特征 | 随机哈希串,无法从名字看出归属 |
| 清理 | docker rm -v 随容器删除,docker volume prune 批量清理 |
| 查看占用 | docker system df -v,或对卷挂载点做 du |
典型使用场景
- 磁盘悄悄变满:镜像自带 VOLUME,每建一次容器就多一个卷
- 清理前评估:确认哪些卷还被容器引用,避免删掉正在承载数据的卷
- 继承镜像行为:使用官方镜像时会自动产生匿名卷,属于镜像设计的一部分
- 批量部署累积:CI 或频繁重建的测试环境,卷数量增长最快
- 审计数据位置:确认应用写入的数据到底落在卷里还是容器可写层里
识别与清理
识别与清理
# 启动一个只给容器内路径的容器,Docker 自动创建匿名卷
docker run -d --name web -v /var/cache/nginx nginx:1.27-alpine
# 看随即产生的随机名卷
docker volume ls | tail -5
# 查看卷的挂载点与占用
docker system df -v | head -30
# 删除容器时一并删除它的匿名卷
docker rm -v web
# 批量清理没有任何容器引用的卷
docker volume prune三类挂载对照
| 类型 | 生命周期 | 适用场景 |
|---|---|---|
| 匿名卷 | 不随容器自动删除,按容器归属管理 | 镜像声明的运行目录,需要可写但不必持久关注 |
| 具名卷 | 独立命名,随项目或人工管理 | 数据库、上传目录等要长期保留的数据 |
| 绑定挂载 | 宿主目录自己管理,删容器不影响 | 配置文件、源码目录、需要宿主直接访问的数据 |
删除容器默认不会删除匿名卷,加 -v 才会一起带走;docker run --rm 运行的临时容器,其匿名卷会随容器清理。
具名卷与匿名卷的底层存储位置相同,只是引用方式不同:匿名卷的随机名无法写进编排文件,重建容器时无法稳定复用。