我有以下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容器中的两个入口点,并且其中两个参数(arg1
和arg2
)的值是共享的。
我的问题:如何定义这两个变量,以便在将它们作为参数传递给入口点时可以重用它们?
我尝试过:
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解析器无法正确“解压缩”这些参数。
答案 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