> For the complete documentation index, see [llms.txt](https://camelgemonion.gitbook.io/docker/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://camelgemonion.gitbook.io/docker/dockercompose.yaml-wen-jian-zhong-chang-yong-zhi-ling/untitled-12/extension-fields.md).

# Extension fields

可以使用扩展字段复用配置片段。这些特殊字段可以是任意格式，只要它们位于Compose文件的根目录中并且其名称以x字符序列开头即可。

{% hint style="info" %}
从3.7格式（对于3.x系列）和2.4格式（对于2.x系列）开始，扩展字段也可以在服务，卷，网络，配置和secrets定义的根目录中使用。
{% endhint %}

```
version: "3.9"
x-custom:
  items:
    - a
    - b
  options:
    max-size: '12m'
  name: "custom"
```

这些字段的内容被Compose忽略，但是可以使用YAML锚点将其插入资源定义中。例如，如果我们希望多个服务使用相同的日志记录配置：

```
logging:
  options:
    max-size: '12m'
    max-file: '5'
  driver: json-file
```

可以像下面这样书写Compose文件：

```
version: "3.9"
x-logging:
  &default-logging
  options:
    max-size: '12m'
    max-file: '5'
  driver: json-file

services:
  web:
    image: myapp/web:latest
    logging: *default-logging
  db:
    image: mysql:latest
    logging: *default-logging
```

也可以使用YAML合并类型覆盖部分扩展字段中的值。例如：

```
version: "3.9"
x-volumes:
  &default-volume
  driver: foobar-storage

services:
  web:
    image: myapp/web:latest
    volumes: ["vol1", "vol2", "vol3"]
volumes:
  vol1: *default-volume
  vol2:
    << : *default-volume
    name: volume02
  vol3:
    << : *default-volume
    driver: default
    name: volume-local
```
