Hadolint 是什么
Hadolint 是专门检查 Dockerfile 的工具,规则以 DL 前缀编号,覆盖镜像标签、包管理、层数与指令写法等实践问题。它把 Dockerfile 当成代码来管:改动走检查与评审,而不是等镜像构建出问题再回头翻文件。规则可按需忽略,失败级别也可通过阈值控制。
基本信息
| 检查对象 | Dockerfile(含多阶段构建) |
|---|---|
| 部署形态 | 单个可执行文件,本地 / CI / 容器内都能跑 |
| 规则编号 | DL 系列,如 DL3008、DL3009、DL3059 |
| 失败级别 | --failure-threshold 设定到什么级别算失败 |
| 豁免方式 | --ignore 指定规则,或配置文件集中管理 |
典型使用场景
- CI 中拦截 Dockerfile 改动,与代码一样走检查与评审
- 排查镜像构建不可复现问题(包版本未锁定)
- 多阶段构建时检查缓存清理与层数是否合理
- 禁止使用 latest 之类浮动标签,明确基础镜像版本
- 编辑器插件实时提示,减少提交后的返工
常用命令
常用命令
hadolint Dockerfile # 基础检查
hadolint --failure-threshold warning Dockerfile # warning 及以上算失败
hadolint --ignore DL3008 Dockerfile # 忽略指定规则,需在提交里说明理由
hadolint -f json Dockerfile # 输出 JSON 便于 CI 解析与归档
hadolint -f checkstyle Dockerfile # 输出给代码审查工具的格式常见 DL 规则读法
| 规则 | 含义 | 处理方向 |
|---|---|---|
| DL3008 | apt 安装的包未固定版本 | 锁定版本,保证构建可复现 |
| DL3009 | 安装后未清理包管理缓存 | 同一层内删除缓存,减小镜像体积 |
| DL3059 | 连续多条 RUN 未合并 | 合并以减少层数与构建时间 |
| DL3025 | CMD / ENTRYPOINT 使用 shell 形式 | 改用 JSON 数组形式,保证信号传递 |
| DL3006 | 基础镜像没有指定标签 | 显式写明版本标签 |
关注点不止规则本身:镜像体积、层数、构建缓存命中率会直接影响部署速度与安全补丁的响应时间,Hadolint 的提示通常是这些问题的入口。
忽略规则要留痕:豁免哪条、为什么、什么时候复核,写在提交信息或配置文件注释里;否则包版本漂移会以构建失败或运行时行为变化的形态冒出来。