docker撰写YAML文件:重新使用传递给入口点的变量作为参数

时间:2020-09-29 07:58:20

标签: docker docker-compose

我有以下docker-compose.yml文件:

version: '3'


services:

  service1:
    image: same_image:latest
    command: >
      --arg1 1000
      --arg2 2000
      --arg3 whatever

  service2:
    image: another_image:latest
    command: >
      --arg1 1000
      --arg2 2000
      --arg3 something_else
      --arg4 additional_argument

因此,我将argX参数传递到两个Docker容器中的两个入口点,并且其中两个参数(arg1arg2)的值是共享的。

我的问题:如何定义这两个变量,以便在将它们作为参数传递给入口点时可以重用它们?

我尝试过:

version: '3.4'

x-common-variables: &common-variables
  arg1: 1000
  arg2: 2000
 

services:

  service1:
    image: same_image:latest
    command: >
      --arg1 *common-variables.arg1
      --arg2 *common-variables.arg2
      --arg3 whatever

  service2:
    image: another_image:latest
    command: >
      --arg1 *common-variables.arg1
      --arg2 *common-variables.arg2
      --arg3 something_else
      --arg4 additional_argument

但是YAML解析器无法正确“解压缩”这些参数。

1 个答案:

答案 0 :(得分:3)

我认为您最好的选择是在arg1文件中提供arg2.env

.env

arg1=1000
arg2=2000

docker-file.yaml

version: '3.4'

services:

  service1:
    image: same_image:latest
    command: >
      --arg1 $arg1
      --arg2 $arg2
      --arg3 whatever
  service2:
    image: another_image:latest
    command: >
      --arg1 $arg1
      --arg2 $arg2
      --arg3 something_else
      --arg4 additional_argument

使用扩展字段,解决方案将更加复杂。首先,您不能使用命令字段的shell形式(即字符串):无法将YAML别名注入字符串字段。您将需要使用列表形式的命令:

version: '3.4'

x-common-variables: 
  - &arg1 "1000"
  - &arg2 "2000"

services:

  service1:
    image: same_image:latest
    command: 
      - --arg1 
      - *arg1
      - --arg2 
      - *arg2
      - --arg3 
      - whatever

  service2:
    image: another_image:latest
    command: 
      - --arg1 
      - *arg1
      - --arg2 
      - *arg2
      - --arg3 
      - something_else
      - --arg4 
      - additional_argument