Dan*_*nyB 7 yaml docker-compose
我正在尝试以docker-compose.yml
某种方式定义文件中的可重用块,以使可重用块定义本身不包含在最终(评估的)YAML中。
我知道如何使用以下语法定义可重用的块:
services:
default: &default
image: some/image
dashboard:
<<: *default
command: run dashboard
ports: ["3000:3000"]
Run Code Online (Sandbox Code Playgroud)
但是,上面也创建了一个以default
服务命名的条目,我想避免这种情况。换句话说,我需要最终的YAML结果仅包括dashboard
在该services
属性下。
YAML有可能吗?我找不到足够清晰地讨论该结构的参考资料。
凭直觉,我尝试了下面的一些变体,但它也没有用。
services:
&default:
image: some/image
dashboard:
<<: *default
command: run dashboard
ports: ["3000:3000"]
Run Code Online (Sandbox Code Playgroud)
Joe*_*eer 15
Docker Compose 文件格式 3.4 添加了对扩展字段的支持:以 x- 开头的顶级键,这些键会被 Docker Compose 和 Docker 引擎忽略。
\n\n例如:
\n\nversion: \'3.4\'\nx-default: &default\n image: some/image\nservices:\n dashboard:\n <<: *default\n command: run dashboard\n ports: ["3000:3000"]\n
Run Code Online (Sandbox Code Playgroud)\n\n来源:\xe2\x80\x9cDon\xe2\x80\x99t 在 Docker Compose Files\xe2\x80\x9d 中重复使用锚点、别名和扩展,作者:King Chung Huang https://link.medium.com/N5DFdiC3F0
\n这在YAML 1.2(或任何以前的版本)中是不可能的。其背后的原因是,YAML被设计为序列化语言,而不是配置语言。
Anchor / Alias构造非常适合序列化循环数据结构。从未打算将其用于声明将在多个地方使用的变量。因此,目前,创建可在多个位置使用的可重用结构的唯一方法是在第一个使用它的位置定义结构。例如:
services:
dashboard:
<<: &default
image: some/image
command: run dashboard
ports: ["3000:3000"]
some_other_service:
<<: *default
other_props: ...
Run Code Online (Sandbox Code Playgroud)
另外,请注意,合并密钥<<
不是YAML规范的一部分,仅被定义为YAML 1.1的附加功能。它没有为YAML 1.2定义,将在即将到来的YAML 1.3中明确弃用。
我们(例如:目前正在使用YAML 1.3的人员)已经意识到此缺失的功能,并计划使用YAML 1.3提供更好的解决方案。
归档时间: |
|
查看次数: |
1296 次 |
最近记录: |