【发布时间】:2017-12-07 20:54:36
【问题描述】:
我正在尝试在 docker-compose.yml 文件中定义可重用块,使可重用块定义本身不包含在最终(评估的)YAML 中。
我知道如何用这种语法定义一个可重用的块:
services:
default: &default
image: some/image
dashboard:
<<: *default
command: run dashboard
ports: ["3000:3000"]
但是,上面还在服务下创建了一个名为default 的条目,我想避免这种情况。换句话说,我需要最终的 YAML 结果只在 services 属性下包含 dashboard。
这可以用 YAML 实现吗?我找不到任何足够清楚地讨论此结构的参考资料。
直觉上,我尝试了以下的一些变体,但也没有奏效。
services:
&default:
image: some/image
dashboard:
<<: *default
command: run dashboard
ports: ["3000:3000"]
【问题讨论】:
-
我刚刚用实用程序
dcw(docker-compose-wrapper) 包装了 docker-compose,它会生成一个新的(隐藏的)YAML 文件,然后在该文件上调用docker-compose。 (ruamel.dcw)。它有一个顶级密钥user-data,它不会被复制到隐藏文件中。您需要通过在 RoundTripLoad 构造函数上使用 SafeLoadflatten_mapping来防止合并在往返过程中un扩展。 -
这是很好的附加信息,但感觉像是过度包装的东西。毕竟,docker-compose 是一种包装器......
-
当我做这个时,我需要一种更简单的方法来为缺失的环境设置默认值,并且能够在不同服务器和不同环境 (systemd/updstart) 上启动时自动覆盖信息。使用模板很容易做到,它就像
docker-compose一样,带有一些额外的命令(当前为bash、expand、generate、templates和truncate) -
我不想建议这个,但您可以定义 1 个或多个基于
busybox的服务,其中 0 个副本具有您的别名。然后在需要的地方使用这些引用。
标签: yaml docker-compose