包含
一个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 fileCompose 还支持使用带有 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/.envpath
path 是必需的,它定义了要解析并包含到本地 Compose 模型中的 Compose 文件的位置。当涉及单个 Compose 文件时,path 可以设置为字符串,或者当需要将多个 Compose 文件 合并在一起 以定义要包含在本地应用程序中的 Compose 模型时,可以设置为字符串列表。
include:
- path:
- ../commons/compose.yaml
- ./commons-override.yamlproject_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文件