2017-08-03 58 views
0

我正在放置一个码头构成文件。我想重复使用重复的部分。例如,每个容器重新使用相同的deploy配置。我试着为它制作一个模板:重新使用YAML部分

... 
    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 

但是这并没有奏效。有没有办法做到这一点?

回答

1

您可以使用YAML锚和别名设施为,有效:

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 

你可以有multipe *deploy_template值单:就好像你指定

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 

将被解析&deploy_template主播。

然而,问题是dummy键和它的值将跳脱docker-compose,并且至少在版本2中没有放置这些信息的地方。

我因此我进行预处理文件docker-compose使用ruamel.dcw(我那个包的作者),它允许将不会出现在输出,你可以把上述的锚信息user-data顶级项。与开始:

version: '2' 
user-data: 
    author: dthree <[email protected]> 
    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 

这将扩大到:

version: '2' 
services: 
    redis: 
    image: ${NAME} 
    ports: 
    - ${PORT}:${PORT} 
    deploy: 
     restart_policy: 
     condition: on-failure 
     delay: 5s 
     max_attempts: 10 
     window: 120s 
    volumes: 
    - /srv/${NAME}/data:/data 

是交给docker-compose本身(使用-f选项)前。 env-defaults“部分”中任何尚未在您执行预处理器的环境中设置的变量都将被赋予它们的默认值,从而轻松覆盖它们。

顺便说一句:你应该小心:

- 6379:6379 

,因为如果端口号得低于60,老YAML解析器泊坞窗,构成用途,解释说标量和60进制。我倾向于总是引用这些值,特别是在使用env时。变量。