包括

在 Docker Compose 版本 2.20.0 中引入

一个 Compose 应用程序可以声明对另一个 Compose 应用程序的依赖关系。这在以下情况下非常有用:

  • 您希望重复使用其他 Compose 文件。
  • 您需要将应用程序模型的各个部分分解为单独的 Compose 文件,以便可以单独管理它们或与他人共享它们。
  • 团队需要使 Compose 文件保持合理的复杂性,因为它必须在更大的部署中为其自己的子域声明有限的资源。

includetop-level 部分用于定义对其他 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 文件的路径。文件随父级一起加载 folder 作为项目目录,并将可选的.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 项目加载。相对路径 在 Compose 文件中由include相对于自己的 Compose 进行解析 file path 的 PATH 路径,而不是基于本地项目的目录。变量使用可选的.env文件,并被本地工程的环境覆盖。

长语法

long 语法提供了对子项目解析的更多控制:

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

路径

path是必需的,它定义了要解析并包含在 local Compose 模型。path可以设置为字符串(当涉及单个 Compose 文件时), 或字符串列表(当多个 Compose 文件需要合并在一起时)合并到 定义要包含在本地应用程序中的 Compose 模型。

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

project_directory

project_directory定义一个基本路径,用于解析 Compose 文件中设置的相对路径。它默认为 包含的 Compose 文件的目录。

env_file

env_file定义一个环境文件,用于在插入变量时定义默认值 在正在解析的 Compose 文件中。它默认为.env文件中的project_directory对于 Compose 文件。

env_file当需要合并多个环境文件时,可以设置为字符串或字符串列表 以定义项目环境。

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

本地项目的环境优先于 Compose 文件设置的值,因此本地项目可以 覆盖自定义的值。

其他资源

有关使用include,请参阅使用多个 Compose 文件