包含

在 Docker Compose 版本 2.20.0 中引入

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

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

include 頂級部分用於定義對另一個 Compose 應用程式或子域的依賴關係。include 部分中列出的每個路徑都將載入為單獨的 Compose 應用程式模型,具有其自己的專案目錄,以便解析相對路徑。

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

include 遞迴應用,因此包含的 Compose 檔案宣告其自己的 include 部分會觸發其他檔案也被包含。

包含的 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 模型時,path 可以設定為字串列表。

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 檔案