包括
一个 Compose 应用程序可以声明对另一个 Compose 应用程序的依赖关系。这在以下情况下非常有用:
- 您希望重复使用其他 Compose 文件。
- 您需要将应用程序模型的各个部分分解为单独的 Compose 文件,以便可以单独管理它们或与他人共享它们。
- 团队需要使 Compose 文件保持合理的复杂性,因为它必须在更大的部署中为其自己的子域声明有限的资源。
这include
top-level 部分用于定义对其他 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 文件的路径。文件随父级一起加载
folder 作为项目目录,并将可选的.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 进行解析
file path 的 PATH 路径,而不是基于本地项目的目录。变量使用可选的.env
文件,并被本地工程的环境覆盖。
长语法
long 语法提供了对子项目解析的更多控制:
include:
- path: ../commons/compose.yaml
project_directory: ..
env_file: ../another/.env
路径
path
是必需的,它定义了要解析并包含在
local Compose 模型。path
可以设置为字符串(当涉及单个 Compose 文件时),
或字符串列表(当多个 Compose 文件需要合并在一起时)合并到
定义要包含在本地应用程序中的 Compose 模型。
include:
- path:
- ../commons/compose.yaml
- ./commons-override.yaml
project_directory
project_directory
定义一个基本路径,用于解析 Compose 文件中设置的相对路径。它默认为
包含的 Compose 文件的目录。
env_file
env_file
定义一个环境文件,用于在插入变量时定义默认值
在正在解析的 Compose 文件中。它默认为.env
文件中的project_directory
对于 Compose
文件。
env_file
当需要合并多个环境文件时,可以设置为字符串或字符串列表
以定义项目环境。
include:
- path: ../another/compose.yaml
env_file:
- ../another/.env
- ../another/dev.env
本地项目的环境优先于 Compose 文件设置的值,因此本地项目可以 覆盖自定义的值。
其他资源
有关使用include
,请参阅使用多个 Compose 文件