docker/dockerfile-upstream本镜像为 docker/dockerfile 正式发布前的暂存版本(Staging),用于测试和预发布验证。生产环境应使用 Docker Hub 上的正式仓库:docker/dockerfile。
作为 BuildKit 的官方 Dockerfile 前端镜像,提供动态加载能力,支持高级 Dockerfile 语法和构建特性,使 Docker 镜像构建更灵活、高效。
bind、cache、tmpfs、secret、ssh 五种挂载类型,实现依赖缓存、密钥安全管理等功能RUN --network 指令控制单条命令的网络环境(none/host/default)--security=insecure 模式,允许特权操作(需 labs 版本)| 标签 | 说明 | Dockerfile 路径 |
|---|---|---|
1.19.0, 1.19, 1, latest | 1.19 系列稳定版 | dockerfile/1.19.0 |
1.18.0, 1.18 | 1.18 系列稳定版 | dockerfile/1.18.0 |
| 标签 | 说明 | Dockerfile 路径 |
|---|---|---|
1.19.0-labs, 1.19-labs, 1-labs, labs | 1.19 系列实验版 | dockerfile/1.19.0-labs |
| 标签 | 说明 | Dockerfile 路径 |
|---|---|---|
master | master 分支稳定开发版 | dockerfile/master |
master-labs | master 分支实验开发版 | dockerfile/master |
通过环境变量启用 BuildKit 模式:
bashexport DOCKER_BUILDKIT=1 # 客户端设置,仅当前终端生效
Docker Buildx 内置启用 BuildKit,无需额外配置:
bashdocker buildx build . # 直接使用 Buildx 构建
通过 Dockerfile 首行的 # syntax 指令指定本暂存镜像作为前端,格式:
dockerfile# syntax=docker/dockerfile:<标签> # 例如:# syntax=docker/dockerfile:1.19.0-labs
说明:
1.19.0-labs),正式版需替换为 docker/dockerfile 仓库标签RUN --mount=...)需指定 Dockerfile 版本 ≥1.2(如 # syntax=docker/dockerfile:1.3),支持以下挂载类型:
5.3.1.1 type=bind(默认类型)
绑定构建上下文或其他构建阶段的目录(只读,可通过 rw 选项启用读写)。
| 参数 | 说明 |
|---|---|
target | 必填,挂载路径 |
source | 源路径,默认值为 from 指定阶段的根目录 |
from | 构建阶段或镜像名称,默认值为构建上下文 |
rw/readwrite | 启用读写模式,写入数据构建后会被丢弃 |
5.3.1.2 type=cache
为编译器、包管理器等提供持久化缓存目录,加速构建。
| 参数 | 说明 |
|---|---|
target | 必填,挂载路径 |
id | 缓存标识,默认值为 target 的路径 |
ro/readonly | 只读模式 |
sharing | 缓存共享模式:shared(多写入者共享)、private(独立缓存)、locked(独占锁),默认 shared |
from | 缓存基础阶段,默认空目录 |
source | from 中的子路径,默认根目录 |
mode | 缓存目录权限(八进制),默认 0755 |
uid/gid | 缓存目录所有者 UID/GID,默认 0 |
示例:缓存 Go 依赖
dockerfile# syntax=docker/dockerfile:1.3 FROM golang RUN --mount=type=cache,target=/root/.cache/go-build go build -o app ./main.go
示例:缓存 apt 包
dockerfile# syntax=docker/dockerfile:1.3 FROM ubuntu # 配置 apt 保留下载缓存 RUN rm -f /etc/apt/apt.conf.d/docker-clean && echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache # 挂载 apt 缓存目录 RUN --mount=type=cache,target=/var/cache/apt --mount=type=cache,target=/var/lib/apt \ apt update && apt-get --no-install-recommends install -y gcc
5.3.1.3 type=tmpfs
挂载临时文件系统,用于临时存储。
| 参数 | 说明 |
|---|---|
target | 必填,挂载路径 |
5.3.1.4 type=secret
安全挂载密钥文件(如 API 密钥、证书),避免密钥嵌入镜像。
| 参数 | 说明 |
|---|---|
id | 密钥标识,默认值为 target 的文件名 |
target | 挂载路径,默认值 /run/secrets/<id> |
required | 密钥不可用时是否报错,默认 false(不报错) |
mode | 密钥文件权限(八进制),默认 0400 |
uid/gid | 密钥文件所有者 UID/GID,默认 0 |
示例:使用 AWS 密钥访问 S3
dockerfile# syntax=docker/dockerfile:1.3 FROM python:3 RUN pip install awscli # 挂载 AWS 密钥文件到 /root/.aws/credentials RUN --mount=type=secret,id=aws,target=/root/.aws/credentials aws s3 cp s3://my-bucket/file.txt .
构建命令:
bashdocker build --secret id=aws,src=$HOME/.aws/credentials .
5.3.1.5 type=ssh
通过 SSH 代理挂载 SSH 密钥,支持带密码的密钥(需通过 ssh-agent 解锁)。
| 参数 | 说明 |
|---|---|
id | SSH 标识,默认 default |
target | SSH 代理套接字路径,默认 /run/buildkit/ssh_agent.${N} |
required | 密钥不可用时是否报错,默认 false |
mode | 套接字权限(八进制),默认 0600 |
uid/gid | 套接字所有者 UID/GID,默认 0 |
示例:访问 GitLab 私有仓库
dockerfile# syntax=docker/dockerfile:1.3 FROM alpine RUN apk add --no-cache openssh-client RUN mkdir -p -m 0700 ~/.ssh && ssh-keyscan gitlab.com >> ~/.ssh/known_hosts RUN --mount=type=ssh ssh -q -T *** # 验证 SSH 连接
构建命令:
basheval $(ssh-agent) # 启动 SSH 代理 ssh-add ~/.ssh/id_rsa # 添加密钥(输入密码解锁) docker build --ssh default=$SSH_AUTH_SOCK . # 挂载 SSH 代理套接字
RUN --network=...)需指定 Dockerfile 版本 ≥1.3(如 # syntax=docker/dockerfile:1.3),控制单条 RUN 命令的网络环境。
| 网络模式 | 说明 |
|---|---|
none | 无网络(仅保留 lo 回环接口,与外部隔离) |
host | 使用主机网络(需 network.host 权限,通过 --allow-insecure-entitlement network.host 启用) |
default | 默认网络(与未指定 --network 效果一致) |
示例:隔离外部网络依赖
dockerfile# syntax=docker/dockerfile:1.3 FROM python:3.6 ADD mypackage.tgz wheels/ # 提前下载依赖包到构建上下文 RUN --network=none pip install --find-links wheels mypackage # 仅使用本地依赖
RUN --security=...)需使用 labs 通道(如 # syntax=docker/dockerfile:1.3-labs),控制命令的安全模式。
| 参数值 | 说明 |
|---|---|
insecure | 禁用沙箱,以特权模式运行(等效于 docker run --privileged),需 security.insecure 权限 |
sandbox | 默认沙箱模式(无实际效果,显式指定用) |
示例:获取特权能力
dockerfile# syntax=docker/dockerfile:1.3-labs FROM ubuntu RUN --security=insecure cat /proc/self/status | grep CapEff # 查看有效能力集
构建命令(需 BuildKitd 启用权限):
bashbuildctl build --frontend=dockerfile.v0 \ --local context=. --local dockerfile=. \ --allow-insecure-entitlement security.insecure
需使用 labs 通道(≥1.3.0-labs,如 # syntax=docker/dockerfile:1.3-labs),支持多行命令内联。
语法:
dockerfileRUN <<<分隔符 [命令] 内联内容... 分隔符
${VAR})和制表符自动剥离(<<-分隔符)#!/usr/bin/env python)指定解释器示例 1:多行 Shell 命令
dockerfile# syntax=docker/dockerfile:1.3-labs FROM debian RUN <<eot bash apt-get update apt-get install -y vim eot
示例 2:Python 脚本内联
dockerfile# syntax=docker/dockerfile:1.3-labs FROM python:3.6 RUN <<eot #!/usr/bin/env python print("Hello, Here-Documents!") eot
示例 3:创建文件
dockerfile# syntax=docker/dockerfile:1.3-labs FROM alpine COPY <<-eot /app/config.txt # "-" 自动剥离内容中的前导制表符 server.port=8080 log.level=info eot
type=cache 缓存 npm/pip/apt 依赖,加速多阶段构建type=secret/ssh 安全挂载密钥,避免硬编码敏感信息--network=none 确保构建不依赖外部网络,提升可重复性--security=insecure 调试需要特权的构建流程(如内核模块加载)docker/dockerfile 的稳定版标签(如 1.19)labs 标签(如 1.19.0-labs)master/master-labs 标签获取最新开发特性| 变量名 | 说明 |
|---|---|
DOCKER_BUILDKIT | Docker 客户端启用 BuildKit:export DOCKER_BUILDKIT=1(v18.09+ 支持) |
syntax 指令格式dockerfile# syntax=docker/dockerfile:<标签>
<标签>:暂存版镜像标签(如 1.19.0-labs、master),需与镜像拉取标签一致--network=host:需 BuildKitd 启动时添加 --allow-insecure-entitlement network.host,构建时通过 --allow network.host 启用--security=insecure:需 BuildKitd 启动时添加 --allow-insecure-entitlement security.insecure,构建时通过 --allow security.insecure 启用--ssh:带密码的密钥需通过 ssh-agent 解锁,直接挂载 .pem 文件不支持密码保护


manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务