docker build --check 是什么
--check 让构建在真正执行之前先做一轮静态检查:把 Dockerfile 交给前端分析,指出不符合最佳实践的写法与潜在错误,例如用了最新标签的基础镜像、缺少工作目录、复制大量无关文件、参数未声明等。它不产生镜像,只给出结论,适合接在代码评审或流水线的早期环节,用很低的成本提前拦住一批问题。
基本信息
| 语法 | docker build --check . 或 docker buildx build --check --progress=plain . |
|---|---|
| 输出内容 | 按等级或类别列出的检查结论与改进建议 |
| 依赖版本 | 较新的 buildx 与 Docker 版本;旧版会报未知标志 |
| 是否产出镜像 | 不产出,仅做分析 |
| 适用场景 | 提交前自检、流水线早期门禁、镜像规范巡检 |
| 配合方式 | 与 plain 日志一起使用,便于把结论落到流水线日志 |
典型使用场景
- 代码评审前自检,减少评审中的低级问题
- 流水线早期门禁:检查不通过则直接失败,省下完整构建时间
- 统一团队镜像规范:把常见反模式固化成检查项
- 接手他人项目时快速了解 Dockerfile 的主要问题
- 排查构建体积异常:从检查结论里找可疑指令
使用与解读
使用与解读
# 基础检查:输出结论,不构建镜像
docker build --check .
# buildx 环境并附带完整日志
docker buildx build --check --progress=plain . 2>&1 | tee check.log
# 按关键词过滤结论,便于接进流水线判断
grep -n -i -E 'warning|error|recommend' check.log | head -20
# 把检查接到提交前流程(示例:失败即中断)
docker build --check . && echo '检查通过,可以提交'典型检查项
| 类别 | 示例结论 | 建议 |
|---|---|---|
| 基础镜像 | 使用了不固定的标签 | 固定到补丁版本或摘要 |
| 工作目录 | 缺少 WORKDIR 声明 | 显式声明工作目录 |
| 上下文 | 复制了大量无关文件 | 补 .dockerignore |
| 参数 | 使用了未声明或作用域外的构建参数 | 在 FROM 之后重新声明 |
| 缓存效率 | 依赖与源码在同一层复制 | 拆分复制,先依赖后源码 |
| 可维护性 | 单条指令过长或缺少注释 | 拆分为可读的步骤 |
检查通过不等于镜像正确:它是静态分析,无法发现运行期问题(权限、端口冲突、依赖缺失)。完整验证仍要构建、启动并跑一遍关键路径。
旧版本不支持该参数时会直接报未知标志,先确认本地与流水线的 Docker 版本,再决定是否把它作为门禁项。