返回

Compose 静态校验

开发工具

正在载入

正在加载工具

工具代码会在打开时按需载入,请稍候。

本工具的全部运算都发生在你的浏览器中,输入内容不会发送到任何服务器。

关于这个工具

粘贴单份 Compose YAML,点击“校验 YAML”进行有限范围的本地检查。工具结合固定版本的官方 schema 与部分服务引用、依赖和端口规则,每条诊断提供行号、列号和隐藏自定义名称的路径。JSON 报告不包含源 YAML、标量值或自定义名称。修改输入或切换语言会清除上一份结果。符合 schema 只是报告的一部分,不代表部署能够正常运行。

常见用途

  • 在审查 Compose 配置前,发现拼错的属性、错误的类型或缺失的必填字段。
  • 在独立的 Compose 文档中查找未声明的服务引用、循环依赖或明显的端口问题。
  • 分享诊断报告而无需复制原始 YAML 和其中的值;分享前仍需检查保留的结构与位置。

使用方法

  1. 1.粘贴一份 Compose YAML 或载入虚构示例,留意可见输入中的敏感信息,并遵守显示的解析限制。
  2. 2.点击“校验 YAML”,结合 schema 状态和完成状态查看错误及警告;未解析的功能可能使检查无法完成。
  3. 3.修改原始 YAML 后重新校验。复制 JSON 报告或下载 compose-diagnostics.json,并使用你自己的可信 Compose 环境另外验证运行情况。

静态校验示例

已声明的服务和静态端口

services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
    depends_on:
      - cache
  cache:
    image: redis:7-alpine
{
  "schemaValid": true,
  "complete": true,
  "codes": []
}

摘要中的 schemaValid 和 complete 为 true,诊断代码为空。此虚构的 web/cache 配置通过支持的静态检查,不会拉取镜像或启动容器。

将端口列表写成单个值

services:
  web:
    image: nginx:alpine
    ports: "8080:80"
{
  "schemaValid": false,
  "complete": true,
  "codes": [
    "schema"
  ]
}

ports 必须使用 schema 要求的结构。单个字符串无法通过 schema 校验,诊断会定位字段而不回显其值。

引用未声明的服务

services:
  web:
    image: nginx:alpine
    depends_on:
      - missing-service
{
  "schemaValid": true,
  "complete": true,
  "codes": [
    "reference"
  ]
}

YAML 符合 schema,却引用了未声明的服务。reference 诊断属于错误,因此不能把 schemaValid 为 true 当作检查成功。

镜像中含有未解析的变量插值

services:
  web:
    image: "nginx:${TAG}"
{
  "schemaValid": false,
  "complete": false,
  "codes": [
    "interpolation"
  ]
}

镜像包含变量表达式。校验器不会用宿主变量替换,也不会猜测值;它会报告 interpolation,将 complete 设为 false,并不确认 schema 有效性。

常见校验误区

  • 把 schema 通过状态当成部署可运行的证明:仍须查看所有诊断和运行条件。
  • 将 ports 写成单个值而非列表,或拼错属性名:按行列号检查 schema 诊断。
  • 引用本文档中没有的服务或资源:修正声明,或自行检查未解析的 include/extends 文件。
  • 期待自动解析 ${VARIABLE} 或 .env:工具不会读取宿主环境或文件。
  • 分享源输入而不是诊断报告:文本框保留原始值,其中可能包含凭据。

限制与说明

  • 输入上限为 100,000 个字符、64 层嵌套、20,000 个解析或展开节点、每个映射或序列 1,000 项、100 个别名和 100 条诊断。在这些限制内支持 YAML 锚点和合并键;拒绝循环别名、重复键、自定义标签、多文档流及不受支持的非 JSON 值。达到限制时校验会标为未完成。
  • 随工具打包的官方 Compose Specification schema 固定到提交 914ec15d1fa498969c0df5c1d672306db3256089,于 2026-10-06 核对,使用 JSON Schema 2020-12。通过 schema 校验只表示符合该快照,已安装的 Compose 实现或版本可能不支持其中的全部字段。
  • 变量表达式保持未解析,包括带默认值的表达式。工具不会读取宿主环境变量或 .env 文件,也不会加载合并 include 和 extends,绝不请求外部文件或网址。这些功能会使结果不完整;变量插值还会使 schema 有效性无法确认。
  • 语义检查涵盖部分已声明服务或资源的引用、依赖循环、静态端口语法及范围,以及可能的宿主端口重叠。它不会复现全部 Compose 规则、profile 选择、项目合并或运行调度;jobs、models 和 pre-start 等较新语义会提示未支持,而不会执行。 符合 schema 的文档仍可能有语义错误。工具不会验证镜像可用性、构建上下文、文件存在性、凭据、权限、平台支持、实时端口占用或部署成功。宿主端口重叠表示潜在冲突,不代表端口已被占用。
  • 输入仅在当前浏览器标签页处理,不上传、不保存历史。原始文本框保持可见。报告省略源文本、标量值和自定义名称,但保留已知字段名、位置和问题类型,不能视为完全匿名。剪贴板和已保存文件不受页面控制。

常见问题

符合 schema 是否代表 Compose 项目能启动?

不是。schema 匹配只检查是否符合固定快照的结构和类型,另外的静态诊断仍可能发现引用或端口错误。镜像、文件、运行权限和宿主环境不在工具检查范围内,部署仍需另行验证。

如何处理 ${VARIABLE}、include 和 extends?

变量表达式保留原样并提示未解析,不读取环境或 .env 的值。引用文件和扩展服务定义绝不加载或执行。报告会标记检查未完成,不会凭空补全缺失的配置。

为什么诊断路径不显示我的服务名?

服务名、自定义键和标量值可能包含隐私信息,因此报告仅保留已知字段名和结构位置。请用行列号找到原字段;别名相关诊断可能指向包含别名的字段,而非锚点定义。

JSON 报告会包含我的 YAML 吗?

不会。报告仅包含状态标记、固定 schema 的来源及带本地化说明的位置诊断,省略源 YAML 和值。配置结构和问题类型仍可能敏感,分享前请检查。

相关工具