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