[英]Extend service in docker-compose 3
我為 docker-compose 3 創建了一個使用許多環境變量的服務:
version: "3"
services:
myservice:
build:
context: ./myservice
command: ./something
environment:
VAR1: "val1"
VAR2: "val2"
VAR3: "val3"
現在我想添加一個使用相同環境變量值的服務,除了VAL1
,並且具有不同的命令:
myotherservice:
build:
context: ./myservice
command: ./somethingelse
environment:
VAR1: "val1-bis"
VAR2: "val2"
VAR3: "val3"
有什么辦法可以避免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"
使用 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"
請參閱有關擴展字段的文檔
您可以將公共環境變量提取到env文件中。
此后,您可以在撰寫文件中使用env_file
配置選項。
-> cat common.env
VAR2=val2
VAR3=val3
您仍然可以使用environment
配置選項傳遞/覆蓋common.env
指定的環境變量以外的環境變量。
myotherservice:
build:
context: ./myservice
command: ./somethingelse
env_file: ./common.env
environment:
VAR1: "val1-bis"
在使用 OP 和 擴展字段文檔建議的 YAML 合並類型時要小心。
合並類型僅適用於字典/地圖,但不適用於數組/列表。 幸運的是,環境部分可以是字典或數組。 因此,OP 的環境部分示例有效。
但是,volumes 部分必須是一個數組,因此合並在那里不起作用。 文檔中沒有提到對數組的需求,但快速的本地測試顯示...volumes contains an invalid type, it should be an array
18.09.2
版本為18.09.2
...volumes contains an invalid type, it should be an array
總之,錨點、別名和合並類型在許多情況下可以為您提供幫助,但它們的工作方式與通過docker-compose -f file1 file2
合並多個撰寫文件不同,也與compose 2 中的extends 指令不同。 在那里,列表的合並按預期工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.