包括
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 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 项目加载。所引用的 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 文件