docker-compose文件属性(7)配置碎片
在使用 Compose 时,你可以利用 YAML 的内置功能使 Compose 文件更简洁高效。锚点和别名允许你创建可复用的配置块。当你发现多个服务中存在重复配置时,这项功能尤其有用。使用可复用的配置块能够减少潜在的错误。
锚点通过 & 符号创建,其后跟随别名。之后你可以使用 * 符号加别名来引用该锚点对应的值。请注意 & 和 * 符号与后续别名之间不能有空格。
你可以在单个 Compose 文件中使用多个锚点和别名。
示例1:示例中基于db-data创建了一个 default-volume的锚点,随后使用别名 *default-volume 定义了metrics卷
volumes:
db-data: &default-volume
driver: default
metrics: *default-volume
锚点解析发生在变量插值之前,因此变量不能用于设置锚点或别名。
示例2:如果你有一个需要在多个服务中使用的锚点,可以结合 extends 字段来使用,这样能使你的 Compose 文件更易于维护。
services:
first:
image: my-image:latest
environment: &env
- CONFIG_KEY
- EXAMPLE_KEY
- DEMO_VAR
second:
image: another-image:latest
environment: *env
示例3:你可能需要对某些值进行部分覆盖。Compose 遵循 YAML 合并类型(merge type)所定义的规则。YAML 的合并类型(通过
在下面的示例中,metrics 卷配置使用别名避免了重复,但覆盖了 name 属性:
services:
backend:
image: example/database
volumes:
- db-data
- metrics
volumes:
db-data: &default-volume
driver: default
name: "data"
metrics:
<<: *default-volume
name: "metrics"
示例4:您还可以扩展锚点以添加其他值。这意味着在 Docker Compose 文件中使用 YAML 锚点(&)和别名(*)时,您不仅可以直接复用整个配置块,还可以在使用别名的位置(例如通过合并操作符 <<: *alias)额外定义新的配置项。这些新增的键值将与锚点的原始配置进行合并,从而实现配置的复用与灵活扩展。注意:YAML 合并(merge)仅适用于映射(mappings),不能用于序列(sequences)。
es:
first:
image: my-image:latest
environment: &env
FOO: BAR
ZOT: QUIX
second:
image: another-image:latest
environment:
<<: *env
YET_ANOTHER: VARIABLE
在上面的示例中,环境变量必须使用 FOO: BAR 这样的映射语法声明,而序列语法 - FOO=BAR 仅在未涉及片段合并时有效。
因为在使用 YAML 锚点合并(<<: *alias)时对环境变量格式的限制。当通过合并操作符引用一个包含环境变量的锚点时,环境变量块必须定义为映射形式(即键值对字典),而不能是列表形式。因为 YAML 的合并功能仅适用于映射类型,序列形式的列表无法参与此类合并操作。
更多推荐




所有评论(0)