首页/云/Docker 容器速查/compose 顶层 volumes 与驱动配置
Compose 编排55 条

compose 顶层 volumes 与驱动配置

在顶层声明具名卷并配置驱动与标签:数据库等状态数据用它统一管理,external: true 引用项目外已存在的卷。

Docker 容器速查云更新于 2026-10-13

顶层 volumes 是什么

Compose 文件顶层可以声明具名卷,服务通过「卷名:容器路径」引用它。声明处能配置驱动、驱动参数、标签与实际卷名,还能用 external 引用项目之外已存在的卷。具名卷的价值在于数据与容器生命周期解耦:容器删了、重建了,数据仍在卷里;由于有明确名字,备份、迁移与跨项目共享都变得可控。

基本信息

声明位置文件顶层 volumes: 卷名: {driver, driver_opts, labels, name, external}
服务引用volumes: - 卷名:/容器路径 或 卷名:/容器路径:ro
实际卷名默认带项目名前缀,如 myproj_dbdata
外部卷external: true 引用已存在卷,Compose 不创建也不删除
删除行为docker compose down -v 删除项目声明的卷(外部卷除外)
查看方式docker volume ls / docker volume inspect 卷名

典型使用场景

  • 数据库、消息队列等有状态服务的数据落盘
  • 把数据目录固定到指定宿主路径:driver_opts 绑定到具体位置
  • 多项目共用一个数据卷:声明为 external 后两边接入
  • 给卷打标签做分类与批量巡检,例如按环境标记
  • 测试环境快速清库:down -v 一次性回收数据
  • 迁移时先导出卷内容,再在新环境用同名卷还原

声明与引用

声明与引用
services:
  db:
    image: postgres:16-alpine
    volumes:
      - dbdata:/var/lib/postgresql/data      # 具名卷引用:数据随卷保留
  api:
    image: app/api:1.4.2
    volumes:
      - shared:/srv/shared:ro                # 只读接入同一卷

volumes:
  dbdata:
    driver: local
    labels:
      env: prod                              # 标签便于巡检与批量统计
  shared:
    external: true
    name: platform-shared-data               # 该项目外已存在的卷

运维动作

运维动作
# 查看项目卷与卷详情(Mountpoint 是宿主上的实际目录)
 docker volume ls --filter label=env=prod
 docker volume inspect myproj_dbdata

# 停服务但保留数据;加 -v 会删除项目声明的卷
 docker compose down
 docker compose down -v

# 用临时容器备份卷内容到归档(数据库建议先停写或走自身备份机制)
 docker run --rm -v myproj_dbdata:/data -v $PWD:/backup alpine \
   tar czf /backup/dbdata.tar.gz -C /data .

顶层字段怎么读

字段作用注意
driver卷驱动,默认 local共享存储才换驱动
driver_opts传给驱动的参数可用 device 绑定到指定宿主目录
labels附加元数据标签便于巡检与批量操作
name指定实际卷名跨项目共享时显式指定
external引用已有卷写 true 时不会创建与删除
项目名会参与默认卷名拼接:换目录名或换项目名后卷名前缀变化,旧数据看起来像消失了。先用 docker volume ls 确认实际卷名,再决定是改名还是重建引用。
down -v 是破坏性操作:它会删除项目声明的卷,也就是真实数据。生产执行前先确认卷的声明方式与是否 external,并留一份可用备份。

易错点

  • 切换项目名后卷名前缀变化,旧数据看起来消失,先确认是命名变化而不是数据丢失
  • down -v 会删除项目声明的卷,清理环境时误用等于删库,生产务必先核对声明方式
  • external 卷不会被 down 删除,长期累积无人回收;项目下线时要单独安排卷的清理
  • 把卷声明写在各项目的同名文件里却不写 name,多项目会各自创建一份卷,共享数据的预期落空

数据来源与参考

  • Docker 官方文档:Compose volumes 顶层元素(docs.docker.com/reference/compose-file/volumes)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌