You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dockerfile中的|1、|2语法代表什么?是否属Docker规范?

DockerHub中|x标记的含义解析

1. 本质:BuildKit构建记录的元数据标记

你看到的|1、|2这类标记,不是Dockerfile的官方语法,也不是DockerHub新增的自定义语法,它是Docker的BuildKit构建引擎在生成镜像层时,添加的构建参数索引标记。

当使用BuildKit(Docker默认启用的新一代构建引擎)构建镜像时,会将构建过程中的参数(比如ARG、环境变量)进行索引编号,|x里的x就是参数的索引序号。这些标记是BuildKit内部用来追踪构建参数的元数据,不会影响镜像的实际构建逻辑。

2. 为什么在DockerHub上能看到?

DockerHub展示的镜像层命令,是直接从镜像的构建记录里提取的原始内容,包含了BuildKit生成的这些元数据标记。但这些标记不属于可编写的Dockerfile语法,所以你在自己编写Dockerfile时,加不加这类标记都不会影响构建结果——Docker在解析Dockerfile时会自动忽略这些非标准的前缀。

3. 示例验证

比如你看到的这两行:

|1 CONSUL_VERSION=1.15.4 /bin/sh -c addgroup consul && adduser -S -G consul consul
RUN |1 TARGETARCH=amd64 /bin/sh -c apt-mark hold ${NV_LIBCUBLAS_DEV_PACKAGE_NAME} ${NV_LIBNCCL_DEV_PACKAGE_NAME} # buildkit

这里的|1表示这一行使用了索引为1的构建参数(比如CONSUL_VERSION或TARGETARCH),BuildKit用它来关联构建过程中的参数上下文,但对Dockerfile的语法有效性没有影响。

4. 总结

  • |x是BuildKit构建引擎生成的内部元数据标记,不属于Dockerfile官方规范;
  • DockerHub只是原样展示镜像构建记录中的内容,并非新增语法;
  • 编写Dockerfile时无需手动添加这类标记,Docker会自动处理构建参数的关联。

内容的提问来源于stack exchange,提问作者Lucas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 10:55:02