配置顶级元素

配置允许服务在不重建 Docker 镜像的情况下调整其行为。与卷类似,配置被挂载为文件到容器的文件系统中。挂载点在容器中的位置默认为 Linux 容器中的 /<config-name> 和 Windows 容器中的 C:\<config-name>

服务只能在 services 顶级元素中通过明确授予的 configs 属性访问配置。

默认情况下,配置

  • 归运行容器命令的用户所有,但可以通过服务配置覆盖。
  • 具有世界可读权限(模式 0444),除非服务配置为覆盖此权限。

顶级 configs 声明定义或引用在 Compose 应用程序中授予服务配置数据。配置的来源是 fileexternal

  • file:配置使用指定路径下文件的内容创建。
  • environment:配置内容使用环境变量的值创建。在 Docker Compose 版本 2.23.1 中引入。
  • content:内容使用内联值创建。在 Docker Compose 版本 2.23.1 中引入。
  • external:如果设置为 true,external 指定此配置已创建。Compose 不会尝试创建它,如果它不存在,则会发生错误。
  • name: 在容器引擎中查找的配置对象的名称。此字段可用于引用包含特殊字符的配置。名称按原样使用,不会使用项目名称进行限定。

示例 1

<project_name>_http_config 在应用程序部署时创建,通过将 httpd.conf 的内容注册为配置数据。

configs:
  http_config:
    file: ./httpd.conf

或者,http_config 可以声明为外部。Compose 会查找 http_config 以将配置数据公开给相关服务。

configs:
  http_config:
    external: true

示例 2

<project_name>_app_config 在应用程序部署时创建,通过将内联内容注册为配置数据。这意味着 Compose 在创建配置时会推断变量,这使您可以根据服务配置调整内容。

configs:
  app_config:
    content: |
      debug=${DEBUG}
      spring.application.admin.enabled=${DEBUG}
      spring.application.name=${COMPOSE_PROJECT_NAME}      

示例 3

外部配置查找也可以通过指定 name 来使用不同的键。

以下示例修改了前一个示例,使用参数 HTTP_CONFIG_KEY 查找配置。实际查找键在部署时通过 变量插值 设置,但对容器暴露为硬编码 ID http_config

configs:
  http_config:
    external: true
    name: "${HTTP_CONFIG_KEY}"

如果 external 设置为 true,则除了 name 之外的所有其他属性都无关紧要。如果 Compose 检测到任何其他属性,它会拒绝 Compose 文件,因为它无效。