配置顶级元素

配置允许服务调整其行为,无需重新构建 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查找配置。实际查找键在部署时由变量的插值设置,但作为硬编码 IDhttp_config暴露给容器。

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

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