簡體   English   中英

在 docker-compose 3 中擴展服務

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM