Rég*_* B. 16 docker docker-compose
我为docker-compose 3创建了一个使用许多环境变量的服务:
version: "3"
services:
myservice:
build:
context: ./myservice
command: ./something
environment:
VAR1: "val1"
VAR2: "val2"
VAR3: "val3"
Run Code Online (Sandbox Code Playgroud)
现在我想添加一个使用相同环境变量值的服务,除了VAL1,并且具有不同的命令:
myotherservice:
build:
context: ./myservice
command: ./somethingelse
environment:
VAR1: "val1-bis"
VAR2: "val2"
VAR3: "val3"
Run Code Online (Sandbox Code Playgroud)
有没有办法避免docker-compose.yml文件中的环境变量重复?在docker-compose 2中,可以使用extends关键字,但在docker-compose 3中不再是这种情况.
编辑:2017年10月,扩展字段被添加到docker-compose 3.4语法:https://docs.docker.com/compose/compose-file/#extension-fields这是正确的方法:
version: "3"
x-env:
&default-env
VAR1: "val1"
VAR2: "val2"
VAR3: "val3"
services:
myservice:
build:
context: ./myservice
command: ./something
environment: *default-env
myotherservice:
build:
context: ./myservice
command: ./somethingelse
environment:
<< : *default-env
VAR1: "val1-bis"
Run Code Online (Sandbox Code Playgroud)
您可以将常见环境变量提取到env文件.
此后,您可以使用env_file撰写文件中的配置选项.
-> cat common.env
VAR2=val2
VAR3=val3
Run Code Online (Sandbox Code Playgroud)
除了common.env使用environment配置选项中指定的环境变量之外,您仍然可以传递/覆盖环境变量.
myotherservice:
build:
context: ./myservice
command: ./somethingelse
env_file: ./common.env
environment:
VAR1: "val1-bis"
Run Code Online (Sandbox Code Playgroud)
使用YAML非常简单:
version: "3"
services:
myservice: &myservice
build:
context: ./myservice
command: ./something
environment: &myservice_environment
VAR1: "val1"
VAR2: "val2"
VAR3: "val3"
myotherservice:
<<: *myservice
environment:
<<: *myservice_environment
VAR1: "val1-bis"
Run Code Online (Sandbox Code Playgroud)
请参阅有关扩展字段的文档
按照 OP 和扩展字段文档的建议使用 YAML 合并类型时要小心。
合并类型仅适用于字典/映射,但不适用于数组/列表。幸运的是,环境部分可以是字典或数组。所以OP的环境部分的例子是有效的。
然而,volumes 部分必须是一个数组,因此合并在那里不起作用。文档中没有提到对数组的需求,但快速的本地测试揭示了...volumes contains an invalid type, it should be an arraydocker 版本18.09.2
总之,锚点、别名和合并类型在许多情况下可以为您提供帮助,但它们的工作方式确实与通过 合并多个 compose 文件不同docker-compose -f file1 file2,并且与compose 2 中的 extends 指令不同。在那里,列表的合并按预期进行。
| 归档时间: |
|
| 查看次数: |
6749 次 |
| 最近记录: |