Include

引入于 Docker Compose 版本 2.20.0

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

  • 您想要重用其他 Compose 文件。
  • 您需要将应用程序模型的部分内容拆分到单独的 Compose 文件中,以便单独管理或与他人共享。
  • 团队需要保持 Compose 文件相当复杂,以便为其在大型部署中的子域声明有限的资源量。

include 顶级部分用于定义对另一个 Compose 应用程序或子域的依赖。 include 部分中列出的每个路径都作为单独的 Compose 应用程序模型加载,并具有自己的项目目录,以便解析相对路径。

一旦包含的 Compose 应用程序被加载,所有资源定义都会被复制到当前的 Compose 应用程序模型中。如果资源名称发生冲突,Compose 会显示警告,并且不会尝试合并它们。为了强制执行此操作,include 会在选定用于定义 Compose 应用程序模型的 Compose 文件被解析和合并之后进行求值,以便检测 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 文件的位置。path 可以设置为字符串(当涉及单个 Compose 文件时),或者设置为字符串列表(当需要将多个 Compose 文件合并在一起以定义要包含在本地应用程序中的 Compose 模型时)。

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

project_directory

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

env_file

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

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

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

本地项目的环境变量优先级高于 Compose 文件中设置的值,因此本地项目可以覆盖这些值以进行自定义。

其他资源

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