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 文件中。

这是什么意思?我不能谷歌&lt;&lt;: *

【问题讨论】:

这是一个 docker-compose.yml,而不是 Dockerfile。它们有不同的文件格式。 【参考方案1】:

&lt;&lt;* 都是 YAML 键(您也可以将它们视为运算符)。与您的问题相关的另一个关键是&amp;

在 YAML 中,您可以定义锚点并在以后使用它们。例如,

foo: &myanchor
  key1: "val1"
  key2: "val2"

bar: *myanchor

在这段代码 sn-p 中,&amp; 定义了一个锚点,将其命名为 myanchor*myanchor 引用了该锚点。现在foobar 具有相同的键和值。

&lt;&lt; 称为 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"

希望对您有所帮助。

【讨论】:

我已经更新了示例,在 &lt;&lt; 之后包含了 : 以使其成为密钥。作为一个小提示,*&amp; 并不是真正的键,它们是指示器。合并键不是 YAML 的正式一部分,但它可能是一个有用的扩展,它记录在 yaml.org/type/merge.html

以上是关于dockerfile中的双箭头(<<:*django)是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

如何在引导程序 4 中删除输入组 <select> 箭头?

用R中的双引号替换转义的双引号

访问结构中的双指针

Images之Dockerfile中的命令2

YAML 中的 <<(双左箭头)语法是啥,它在哪里指定?

JavaScript 字符串中的双引号