卷顶级元素
卷是由容器引擎实现的持久数据存储。 Compose 为服务提供了一种中立的方式来挂载卷,并提供配置参数来将卷分配给基础设施。
顶级volumes
声明允许您配置可在多个服务之间重用的命名卷。要在多个服务中使用卷,您必须使用
顶级元素中的volumesservices
属性显式授予每个服务访问权限。该volumes
属性具有提供更精细控制的附加语法。
提示
使用大型存储库或单一存储库,或者使用不再随代码库扩展的虚拟文件系统? Compose 现在利用 同步文件共享并自动为绑定安装创建文件共享。确保您已通过付费订阅登录 Docker,并在 Docker Desktop 的设置中启用了Access 实验性功能和使用 Compose 管理同步文件共享。
例子
以下示例显示了一个双服务设置,其中数据库的数据目录作为名为 的卷与另一个服务共享
db-data
,以便可以定期备份。
services:
backend:
image: example/database
volumes:
- db-data:/etc/data
backup:
image: backup-service
volumes:
- db-data:/var/lib/backup/data
volumes:
db-data:
该db-data
卷安装在/var/lib/backup/data
和/etc/data
容器路径上,分别用于备份和后端。
docker compose up
如果卷尚不存在,则运行将创建该卷。否则,如果在 Compose 外部手动删除现有卷,则会使用并重新创建现有卷。
属性
顶级volumes
部分下的条目可以为空,在这种情况下,它使用容器引擎的默认配置来创建卷。或者,您可以使用以下键对其进行配置:
司机
指定应使用哪个卷驱动程序。如果驱动程序不可用,Compose 将返回错误并且不会部署应用程序。
volumes:
db-data:
driver: foobar
驱动程序选项
driver_opts
将选项列表指定为键值对,以传递给该卷的驱动程序。这些选项取决于驱动程序。
volumes:
example:
driver_opts:
type: "nfs"
o: "addr=10.40.0.199,nolock,soft,rw"
device: ":/docker/example"
外部的
如果设置为true
:
external
指定该卷已存在于平台上,并且其生命周期在应用程序之外进行管理。然后,Compose 不会创建该卷,并且如果该卷不存在,则会返回错误。- 除此以外的所有其他属性
name
都是无关紧要的。如果 Compose 检测到任何其他属性,它会拒绝该 Compose 文件,因为该文件无效。
在下面的示例中,
{project_name}_db-data
Compose 不会尝试创建名为 的卷,而是查找简单名为 的现有卷db-data
并将其挂载到backend
服务的容器中。
services:
backend:
image: example/database
volumes:
- db-data:/etc/data
volumes:
db-data:
external: true
标签
labels
用于将元数据添加到卷中。您可以使用数组或字典。
建议您使用反向 DNS 表示法,以防止您的标签与其他软件使用的标签发生冲突。
volumes:
db-data:
labels:
com.example.description: "Database volume"
com.example.department: "IT/Ops"
com.example.label-with-empty-value: ""
volumes:
db-data:
labels:
- "com.example.description=Database volume"
- "com.example.department=IT/Ops"
- "com.example.label-with-empty-value"
组成集合com.docker.compose.project
和com.docker.compose.volume
标签。
姓名
name
为卷设置自定义名称。名称字段可用于引用包含特殊字符的卷。该名称按原样使用,并且不受堆栈名称的限制。
volumes:
db-data:
name: "my-app-data"
这使得可以将此查找名称作为 Compose 文件的参数,以便卷的模型 ID 被硬编码,但平台上的实际卷 ID 是在部署期间在运行时设置的。
例如,如果DATABASE_VOLUME=my_volume_001
在您的.env
文件中:
volumes:
db-data:
name: ${DATABASE_VOLUME}
运行时docker compose up
使用名为 的卷my_volume_001
。
它也可以与属性结合使用external
。这意味着用于在平台上查找实际卷的卷名称与用于在 Compose 文件中引用它的名称分开设置:
volumes:
db-data:
external:
name: actual-name-of-volume