Volumes 顶级元素
卷是由容器引擎实现的持久性数据存储。Compose 为服务提供了一种中立的方式来挂载卷,并为配置参数提供了将它们分配给基础架构的方法。顶级声明允许您配置可在多个服务之间重复使用的命名卷。volumes
要跨多个服务使用卷,您必须使用 top-level 元素中的 volumes 属性显式授予每个服务访问权限。该属性具有提供更精细控制的其他语法。services
volumes
提示
使用大型存储库或 monorepo,或者使用不再随代码库扩展的虚拟文件系统? Compose 现在利用同步文件共享,并自动为绑定挂载创建文件共享。 确保您已使用付费订阅登录到 Docker,并且已在 Docker Desktop 的设置中启用了 Access experimental features 和 Manage Synchronized file shares with 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
Running (正在运行) 将创建卷(如果尚不存在)。否则,系统会使用现有卷,并在 Compose 之外手动删除现有卷时重新创建该卷。docker compose up
属性
top-level 部分下的条目可以为空,在这种情况下,它使用容器引擎的默认配置
创建卷。(可选)您可以使用以下键对其进行配置:volumes
司机
指定应使用哪个卷驱动程序。如果驱动程序不可用,Compose 会返回错误并且不会部署应用程序。
volumes:
db-data:
driver: foobar
driver_opts
driver_opts
将选项列表指定为键值对,以传递给此卷的驱动程序。这些选项取决于驱动程序。
volumes:
example:
driver_opts:
type: "nfs"
o: "addr=10.40.0.199,nolock,soft,rw"
device: ":/docker/example"
外部
如果设置为 :true
external
指定此卷已存在于平台上,并且其生命周期在外部进行管理 的那个应用程序。然后,Compose 不会创建卷,如果卷不存在,则会返回错误。- 除 之外,所有其他属性都无关紧要。如果 Compose 检测到任何其他属性,则会拒绝 Compose 文件,因为它无效。
name
在下面的示例中,Compose 不会尝试创建名为 的卷,而是简单地查找现有卷
调用并将其挂载到服务的容器中。{project_name}_db-data
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
设置卷的自定义名称。name 字段可用于引用包含特殊
字符。该名称按原样使用,并且不与堆栈名称划定范围。
volumes:
db-data:
name: "my-app-data"
这样就可以将此查找名称作为 Compose 文件的参数,以便卷的模型 ID 是硬编码的,但平台上的实际卷 ID 是在部署期间的运行时设置的。
例如,if is in your file:DATABASE_VOLUME=my_volume_001
.env
volumes:
db-data:
name: ${DATABASE_VOLUME}
Running 使用名为 的卷。docker compose up
my_volume_001
它也可以与物业结合使用。这意味着用于在平台上查找实际卷的名称与用于在 Compose 文件中引用卷的名称是分开设置的:external
volumes:
db-data:
external: true
name: actual-name-of-volume