YAML 语法速查表 - YAML 配置语法常用命令大全

写 Docker Compose、Kubernetes、GitHub Actions 的配置时,缩进错了、冒号后漏空格、特殊字符忘加引号是最常见的错误来源。这份速查把 8 组最常用写法——基础语法、数据类型、列表与字典、多行字符串、锚点引用、类型转换——按用途排好:写新配置时对照结构,报错时按节排查缩进与引号;同时标注了 YAML 与 JSON 的差异(单引号不转义、可加注释、支持锚点复用)。读完你就能独立写出结构清晰、可维护的配置文件。

配置格式·共 54 条命令·最后更新 2026-07-21

典型使用场景

写 Docker Compose、Kubernetes、GitHub Actions 或任何 YAML 配置的人,最常遇到两类场景:从零搭一份能运行的配置,或配置报错时定位语法问题。比如为服务写 compose 文件,端口值 "8080:80" 必须用双引号包住,否则会被解析成序列;多个服务要复用公共字段时,用锚点 defaults 定义一次,再通过 << 合并进各服务,避免重复复制整块配置。读完并对照本表,你能独立写出结构正确的 YAML,并在报错时快速判断是缩进、冒号空格还是引号缺失的问题。

基础语法 Basic Syntax 8

key: value
键值对(冒号后必须有空格)
# 注释
单行注释
---
文档分隔符(多文档用)
...
文档结束符
string
字符串(默认不需要引号)
"string" / 'string'
双引号(支持转义)/ 单引号(不转义)
key: "value: with colon"
值含特殊字符(: # 等)需加引号
key with spaces: value
键名可含空格(无需引号)

数据类型 Data Types 8

null / ~
空值(显式声明键无值,避免读取时报类型错误)
true / false
布尔值(true 真 false 假,常用来作为功能开关)
123 / 0x1A / 0o17 / 0b1010
整数(十进制/十六/八/二进制)
3.14 / .inf / -.inf / .nan
浮点数(无穷大/NaN)
2026-07-19
日期(ISO 8601)
2026-07-19T10:30:00Z
日期时间(UTC)
2026-07-19T10:30:00+08:00
带时区的日期时间
!!binary "aGVsbG8="
二进制数据(base64 编码)

列表 List / Array 6

- item1\n- item2
块风格列表
[item1, item2]
流风格列表(行内)
fruits:\n - apple\n - banana
嵌套列表
items: []
空列表
matrix:\n - [1, 2]\n - [3, 4]
列表中的列表
users:\n -\n name: tom\n age: 20
列表中放字典

字典 Dictionary / Object 6

key1: value1\nkey2: value2
块风格字典
{key1: value1, key2: value2}
流风格字典(行内)
person:\n name: tom\n age: 20
嵌套字典
person: {name: tom, age: 20}
流风格嵌套字典
config: {}
空字典
server:\n host: localhost\n ports:\n - 80\n - 443
字典与列表混合嵌套

多行字符串 Multiline String 7

text: |\n line1\n line2
保留换行(Literal 标量)
text: >\n line1\n line2
折叠换行为空格(Folded 标量)
text: "line1\nline2"
双引号内显式换行
text: |-\n line1\n line2
保留换行并去除末尾换行(- chomp)
text: |+\n line1\n line2
保留换行并保留末尾空行(+ chomp)
text: |2\n line1\n line2
指定缩进指示数字(2 个空格)
text: >-\n line1\n line2
折叠换行并去除末尾换行

锚点与引用 Anchor & Alias 6

default: &default\n key: value
定义锚点(&)
env: *default
引用锚点(*)
env:\n <<: *default\n extra: value
合并锚点到当前字典(<<)
list: &list [a, b, c]
为列表定义锚点
copy: *list
引用列表锚点
config:\n <<: [*base, *override]
合并多个锚点(后者覆盖前者)

类型强制转换 Type Conversion 8

key: !!str 123
将整数转为字符串 "123"
key: !!int "42"
将字符串转为整数 42
key: !!float "3.14"
将字符串转为浮点数
key: !!bool "yes"
将字符串转为布尔值
key: !!timestamp "2026-07-19"
将字符串转为时间戳
key: !!null ""
将空字符串转为 null
key: !!seq {}
显式声明为序列类型
key: !!map []
显式声明为映射类型

实用示例 Real-world Examples 5

services:\n web:\n image: nginx:latest\n ports:\n - "80:80"
Docker Compose 服务定义
steps:\n - name: Checkout\n uses: actions/checkout@v4
GitHub Actions 步骤
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: my-app
Kubernetes 资源定义
---\ntitle: My Post\ndate: 2026-07-19\n---
Front Matter(文章元信息)
env:\n DATABASE_URL: postgres://localhost/mydb
环境变量配置

命令示例

用锚点合并复用公共配置

defaults: &defaults\n replicas: 2\n image: nginx:1.25\n env: production\n\napp:\n <<: *defaults\n name: web

&defaults 定义锚点,<<: *defaults 把公共字段合并进 app;显式写的 name: web 覆盖同名锚点键。多服务复用公共配置时可避免逐段复制。

输出

解析后等价于:\napp:\n  name: web\n  replicas: 2\n  image: nginx:1.25\n  env: production

Docker Compose 端口映射要加引号

services:\n web:\n image: nginx:latest\n ports:\n - "8080:80"\n environment:\n NGINX_PORT: "80"

ports 里的 "8080:80" 必须加双引号,否则冒号加数字会被解析成序列语法而报错;environment 中的值想保留字符串语义时同样建议加引号。

常见坑与注意事项

  • 缩进必须一致:同一层级不混用空格数量、更不能使用 Tab,否则解析器报错或产生意外的深层嵌套。
  • 冒号后必须有空格(key: value),否则整行被当字符串处理,配置静默不生效。
  • 值以 : # @ 等特殊字符开头时需加引号,避免被当成标签、注释或锚点语法。
  • 日期与数字会被自动类型推断(2026-07-19 会解析成 Date),需要字符串语义时主动加引号。
  • << 合并键的优先级低于显式键:同名键以显式定义为准,不要指望锚点能覆盖已写的值。

提示

  • YAML 对缩进敏感,必须用空格不能用 Tab,同一层级必须对齐。
  • 冒号后必须有空格(key: value),否则会被解析为字符串。
  • 多行字符串用 | 保留换行,用 > 折叠换行(适合长段落)。
  • 字符串含特殊字符(: # @ ` 等)时需加引号,避免解析歧义。
  • 锚点 & 定义、别名 * 引用、<< 合并键可减少重复配置。
  • 多文档用 --- 分隔,常见于 Front Matter 和 CI/CD 配置。

官方参考来源

下方为命令对应的官方权威文档,供你核对最新用法与深入查阅。

由 巧匠 维护

公开更新于 2026年7月21日,内容持续校对官方文档。

联系我们

命令或描述有误?提交反馈、商务合作或产品建议都可发送邮件给我们。

联系我们