dockerfile中的双箭头(<<:*django)是啥意思?
Posted
技术标签:
【中文标题】dockerfile中的双箭头(<<:*django)是啥意思?【英文标题】:what's the double arrow (<<: *django) means in dockerfile?dockerfile中的双箭头(<<:*django)是什么意思? 【发布时间】:2018-10-08 21:55:39 【问题描述】:我看到了类似的东西
celerybeat:
<<: *django
在 https://github.com/pydanny/cookiecutter-django 示例 docker 文件中。
这是什么意思?我不能谷歌<<: *
【问题讨论】:
这是一个 docker-compose.yml,而不是 Dockerfile。它们有不同的文件格式。 【参考方案1】:<<
和 *
都是 YAML 键(您也可以将它们视为运算符)。与您的问题相关的另一个关键是&
。
在 YAML 中,您可以定义锚点并在以后使用它们。例如,
foo: &myanchor
key1: "val1"
key2: "val2"
bar: *myanchor
在这段代码 sn-p 中,&
定义了一个锚点,将其命名为 myanchor
,*myanchor
引用了该锚点。现在foo
和bar
具有相同的键和值。
<<
称为 YAML 合并键。您可以将其与 OOP 中的类继承进行比较(不是那么准确,但可以帮助您理解)。请参见下面的示例。
foo: &myanchor
key1: "val1"
key2: "val2"
bar:
<< : *myanchor
key2: "val2-new"
key3: "val3"
在这段代码 sn-p 中,我们将键和值从 foo
合并到 bar
,但将 key2
覆盖为新值。我们向bar
添加一个新的键值对。
现在bar
具有以下值:"bar": "key1": "val1", "key2": val2-new", "key3": "val3"
。
希望对您有所帮助。
【讨论】:
我已经更新了示例,在<<
之后包含了 :
以使其成为密钥。作为一个小提示,*
和&
并不是真正的键,它们是指示器。合并键不是 YAML 的正式一部分,但它可能是一个有用的扩展,它记录在 yaml.org/type/merge.html以上是关于dockerfile中的双箭头(<<:*django)是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章