这是Ben的帖子is there YAML syntax for sharing part of a list or map的后续工作,尽管我走了一步,合并了两个数组后又继承了第三次。
我正在创建一个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
但是我得到了错误
Unsupported config option for services.service-1: 'environment+'
如果我没有在environment+:
级别使用custom-tamplate-1:
,或者如果我在environment+:
级别定义了service-1:
,那么它将起作用。
我希望结果是
services:
service-1:
environment:
FOO:BAR
FOO2:BAR2
有可能实现我想要的吗?
答案 0 :(得分:2)
TL; DR:不能,不可能
首先,您在docker-compose中有拼写错误,请下次复制整个docker-compose。这是我的更正(我不想编辑您的问题),并扩展为可测试:
repr
此设置将完全覆盖环境设置,因此仅设置了df
,我想这就是您要问的原因。
我不知道您在哪里使用plus 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
语法,但是我找不到任何有关它的信息。我确实发现的唯一地方FOO2
在https://yaml.org/refcard.html中,但是根本没有提到数组。那是字符串。
您根本无法合并数组,但是可以对环境使用+
语法,并且可以通过以下方式进行合并:
+
我们正在使用的合并Merge Key Language-Independent Type不支持嵌套合并。这意味着密钥要么是从一个对象中选取的,要么是从另一个对象中选取的,而不是组合。这是有意为之的,在大多数情况下,这是良好的行为。可悲的是,没有yaml功能(我所知道的任何功能)都支持嵌套合并,因此对您问题的简单答案是“不,这是不可能的”
旁注:GitLab尝试使用其专有的extends
支持
基于键的反向深度合并