重复使用YAML部分

重复使用YAML部分,yaml,Yaml,我正在整理一份docker撰写的文件。我想重复使用重复的部分。例如,每个容器重新使用相同的deployconfig。我试着为它制作一个模板: ... redis: image: redis ports: - 6379:6379 deploy: deploy_template volumes: - /srv/redis/data:/data deploy_template: restart_policy: conditi

我正在整理一份docker撰写的文件。我想重复使用重复的部分。例如,每个容器重新使用相同的
deploy
config。我试着为它制作一个模板:

  ...
  redis:
    image: redis
    ports:
      - 6379:6379
    deploy: deploy_template
    volumes:
      - /srv/redis/data:/data

deploy_template:
  restart_policy:
    condition: on-failure
    delay: 5s
    max_attempts: 10
    window: 120s

然而,这并没有起作用。有什么方法可以做到这一点吗?

您可以使用YAML anchor和alias功能,有效地:

version: '2'
dummy: &deploy_template
  restart_policy:
    condition: on-failure
    delay: 5s
    max_attempts: 10
    window: 120s
services:
  redis:
    image: redis
    ports:
      - 6379:6379
    deploy: *deploy_template
    volumes:
      - /srv/redis/data:/data
将进行分析,就像您指定了:

version: '2'
dummy:
  restart_policy:
    condition: on-failure
    delay: 5s
    max_attempts: 10
    window: 120s
services:
  redis:
    image: redis
    ports:
    - 6379:6379
    deploy:
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 10
        window: 120s
    volumes:
    - /srv/redis/data:/data
对于单个
&deploy\u模板
锚点,可以有多个
*deploy\u模板

然而,问题是
虚拟
键及其值将触发
docker compose
,至少在版本2中没有放置此信息的位置

因此,我使用(我是该软件包的作者)对我的
docker compose
文件进行预处理,这允许
用户数据
顶级键不会出现在输出中,并且您可以将这些锚定信息放在哪里。首先是:

version: '2'
user-data:
  author: dthree <calvin@hobbes.org>
  description: redis container
  env-defaults:
    NAME: redis  # default values if not specified in the environment
    PORT: 6379
  dummy: 
  - &deploy_template
    restart_policy:
      condition: on-failure
      delay: 5s
      max_attempts: 10
      window: 120s
  - &some_other_template:
    x: null
services:
  redis:
    image: ${NAME}
    ports:
      - "${PORT}:${PORT}"
    deploy: *deploy_template
    volumes:
      - /srv/${NAME}/data:/data
在交给
docker之前,自行编写
(使用
-f
选项)。
env defaults
“部分”中尚未在执行预处理器的环境中设置的任何变量都将被赋予其默认值,以便于覆盖它们

顺便说一句:你应该注意:

 - 6379:6379
因为如果端口号小于60,docker compose使用的旧YAML解析器会将该标量解释为sexagesimal。我总是引用这样的值,尤其是在使用env时。变量

 - 6379:6379