Docker为YAML别名和锚点组合合并数组

Docker为YAML别名和锚点组合合并数组,docker,yaml,Docker,Yaml,我有以下损坏的docker compose文件 版本:“3.4” x-vols1:&vols-1 -/home/:/home/ x-vols2:&vols-2 -/tmp/:/tmp/ 服务: 附录1: 容器名称:app1 图片:app1 卷数: Yaml合并语法用于合并映射,而不是数组。有关更多信息,请参阅。但是,如果只是添加单个卷,则不需要合并任何内容。只需将别名作为数组项插入即可: version: '3.4' x-vols1: &vols-1 "/home/:/home

我有以下损坏的docker compose文件

版本:“3.4”
x-vols1:&vols-1
-/home/:/home/
x-vols2:&vols-2
-/tmp/:/tmp/
服务:
附录1:
容器名称:app1
图片:app1
卷数:

Yaml合并语法用于合并映射,而不是数组。有关更多信息,请参阅。但是,如果只是添加单个卷,则不需要合并任何内容。只需将别名作为数组项插入即可:

version: '3.4'

x-vols1: &vols-1
    "/home/:/home/"

x-vols2: &vols-2
    "/tmp/:/tmp/"

services:
    app1:
        container_name: app1
        image: app1
        volumes:
            - *vols-1
    app2:
        container_name: app2
        image: app2
        volumes:
            - *vols-1
            - *vols-2

通过使用多个
docker compose
文件,每个卷一个,可以实现所需的行为。请注意,锚定和别名不是必需的,但要保持它们与问题对齐

base.yaml

版本:“3.4”
服务:
附录1:
容器名称:app1
图片:app1
附录2:
容器名称:app2
图片:app2
vol1.yaml

版本:“3.4”
x-vols1:&vols-1
卷数:
-/home/:/home/
服务:
附录1:
容器名称:app1
图片:app1

我建议您遵循KISS原则,不要在配置文件中开始编程。谢谢您的回答。我希望docker compose为数组合并添加了一些支持(对于
,在本例中,您已从合并数组更改为合并映射。这不需要多个合成文件。这只是部分正确。递归合并映射,最终合并数组本身,这回答了问题。您仍然需要多个合成文件,否则,将继续合并映射。)e(单独使用yaml)将覆盖这些值。确实如此。看起来compose在合并方面比yaml做得更好。如果您开始变得太复杂,可能值得看看一些模板工具,如gomplate和jsonnet。