引用

Docker Compose 版本 2.20.0 中引入

Compose 應用程式可以宣告對另一個 Compose 應用程式的依賴關係。這在以下情況下很有用:

  • 您想要重複使用其他 Compose 檔案。
  • 您需要將應用程式模型的某些部分分解成單獨的 Compose 檔案,以便可以單獨管理或與他人共用。
  • 團隊需要在其必須在較大部署中為其子網域宣告的有限資源數量下,保持 Compose 檔案的合理複雜性。

頂層 `include` 區段用於定義對另一個 Compose 應用程式或子網域的依賴關係。 `include` 區段中列出的每個路徑都會載入為個別的 Compose 應用程式模型,並具有自己的專案目錄,以便解析相對路徑。

載入包含的 Compose 應用程式後,所有資源定義都會複製到目前的 Compose 應用程式模型中。如果資源名稱衝突,Compose 會顯示警告,並且不會嘗試合併它們。為了強制執行此操作,在剖析和合併選定用於定義 Compose 應用程式模型的 Compose 檔案之後,才會評估 `include`,以便偵測 Compose 檔案之間的衝突。

`include` 會遞迴套用,因此宣告自身 `include` 區段的包含 Compose 檔案也會觸發包含其他檔案。

目前的 Compose 應用程式可以使用從包含的 Compose 檔案中提取的任何磁碟區、網路或其他資源來進行跨服務參考。例如:

include:
  - my-compose-include.yaml  #with serviceB declared
services:
  serviceA:
    build: .
    depends_on:
      - serviceB #use serviceB directly as if it was declared in this Compose file

Compose 也支援在 `include` 中使用插值變數。建議您指定必要的變數。例如:

include:
  -${INCLUDE_PATH:?FOO}/compose.yaml

簡短語法

簡短語法僅定義其他 Compose 檔案的路徑。該檔案會以父資料夾作為專案目錄載入,並載入一個可選的 `.env` 檔案,透過插值定義任何變數的預設值。本地專案的環境可以覆蓋這些值。

include:
  - ../commons/compose.yaml
  - ../another_domain/compose.yaml

services:
  webapp:
    depends_on:
      - included-service # defined by another_domain

在上面的範例中,`../commons/compose.yaml` 和 `../another_domain/compose.yaml` 都會載入為個別的 Compose 專案。 `include` 所參考的 Compose 檔案中的相對路徑是相對於它們自己的 Compose 檔案路徑解析的,而不是基於本地專案的目錄。變數會使用在同一個資料夾中的可選 `.env` 檔案中設定的值進行插值,並由本地專案的環境覆蓋。

完整語法

完整語法提供對子專案剖析更多的控制

include:
   - path: ../commons/compose.yaml
     project_directory: ..
     env_file: ../another/.env

路徑

path 為必要參數,定義要解析並包含到本地 Compose 模型中的 Compose 檔案位置。當只有一個 Compose 檔案時,path 可以設定為字串;當需要將多個 Compose 檔案合併以定義要包含在本地應用程式中的 Compose 模型時,則可以設定為字串列表。

include:
   - path: 
       - ../commons/compose.yaml
       - ./commons-override.yaml

專案目錄

project_directory 定義一個基底路徑,用於解析 Compose 檔案中設定的相對路徑。它預設為所包含 Compose 檔案的目錄。

環境變數檔案

env_file 定義一個或多個環境檔案,用於在解析 Compose 檔案時定義變數插值的預設值。它預設為正在解析的 Compose 檔案所在 project_directory 中的 .env 檔案。

當需要合併多個環境檔案以定義專案環境時,env_file 可以設定為字串或字串列表。

include:
   - path: ../another/compose.yaml
     env_file:
       - ../another/.env
       - ../another/dev.env

本地專案的環境優先於 Compose 檔案設定的值,以便本地專案可以覆寫值進行客製化。

其他資源

有關使用 include 的更多資訊,請參閱使用多個 Compose 檔案