包括

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 项目加载。所引用的 Compose 文件中的相对路径include是相对于其自己的 Compose 文件路径进行解析的,而不是基于本地项目的目录。变量使用同一文件夹中的可选文件中设置的值进行插值 .env,并被本地项目的环境覆盖。

长语法

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

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

小路

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

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

项目目录

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

环境文件

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

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

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

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

其他资源

有关使用的更多信息include,请参阅 使用多个 Compose 文件