Arrays 合并Yaml数组嵌套

Arrays 合并Yaml数组嵌套,arrays,dictionary,docker-compose,yaml,Arrays,Dictionary,Docker Compose,Yaml,这是Ben的文章的一点后续内容,尽管我在合并两个数组之后又向前迈出了一步,并继承了第三次 我正在创建一个docker compose.yml文件,并希望这样做锚和别名 x-template: base-template: &base-template environemt: FOO=BAR custom-template-1: &custom-template1 <<: *base-template environment+

这是Ben的文章的一点后续内容,尽管我在合并两个数组之后又向前迈出了一步,并继承了第三次

我正在创建一个
docker compose.yml
文件,并希望这样做锚和别名

x-template:
  base-template: &base-template
    environemt:
      FOO=BAR
  custom-template-1: &custom-template1
    <<: *base-template
    environment+:
      FOO2=BAR2

services:
  service-1:
    <<: *custom-template1
如果我没有在
custom-tamplate-1:
级别上使用
environment+:
,或者如果我在
service-1:
级别上定义
environment+:
,它就会工作

我希望结果是

services:
  service-1:
    environment:
      FOO:BAR
      FOO2:BAR2

有可能实现我想要的吗;医生:不可能


首先,您的docker compose中有拼写错误,请下次复制整个docker compose。以下是我的更正(我不想编辑您的问题)并扩展为可测试:

version: '2.4'

x-base-template: &base-template
  image: alpine
  command: env
  environment:
    - FOO=BAR

x-custom-template-1: &custom-template1
  <<: *base-template
  environment:
    - FOO2=BAR2

services:
  service-1:
    <<: *custom-template1
我们正在使用的合并不支持嵌套合并。这意味着关键点要么从一个对象拾取,要么从另一个对象拾取,而不是组合。这是有意设计的,大多数时候都是良好的行为。可悲的是,没有yaml特性(据我所知)支持嵌套合并,所以对您的问题的简单回答是“不,这是不可能的”


旁注:GitLab试图用其专有的CI配置解决这个问题,该配置支持

基于键的反向深度合并


早就应该接受这个答案了。谢谢你的解释。
extends
是Docker,但在v3中被删除了。如果只是像这样重写,那么值得从命令行
-e
,或者使用一个,无论哪一个涉及的键入最少。@NomasPrime>Docker,但是在v3中被删除了。但没有理由切换到v3,v2仍在开发中。更多信息请点击此处:
version: '2.4'

x-base-template: &base-template
  image: alpine
  command: env
  environment:
    - FOO=BAR

x-custom-template-1: &custom-template1
  <<: *base-template
  environment:
    - FOO2=BAR2

services:
  service-1:
    <<: *custom-template1
version: '2.4'

x-base-environment: &base-environment
  FOO: BAR

x-base-template: &base-template
  image: alpine
  command: env
  environment: *base-environment # This is only necessary if you want variables in base-template

x-custom-template-1: &custom-template1
  <<: *base-template
  environment:
    <<: *base-environment
    FOO2: BAR2

services:
  service-1:
    <<: *custom-template1