Include

要求: 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

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 文件

页面选项