包含

在 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 模型时,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 文件