首页/开发/代码质量与评审速查/Hadolint:Dockerfile 检查
规范与静态检查65 条

Hadolint:Dockerfile 检查

Hadolint 检查 Dockerfile 规范:DL 系列规则(如 DL3008 apt 安装固定版本),支持通过 --failure-threshold 控制失败级别。

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 规则读法

规则含义处理方向
DL3008apt 安装的包未固定版本锁定版本,保证构建可复现
DL3009安装后未清理包管理缓存同一层内删除缓存,减小镜像体积
DL3059连续多条 RUN 未合并合并以减少层数与构建时间
DL3025CMD / ENTRYPOINT 使用 shell 形式改用 JSON 数组形式,保证信号传递
DL3006基础镜像没有指定标签显式写明版本标签
关注点不止规则本身:镜像体积、层数、构建缓存命中率会直接影响部署速度与安全补丁的响应时间,Hadolint 的提示通常是这些问题的入口。
忽略规则要留痕:豁免哪条、为什么、什么时候复核,写在提交信息或配置文件注释里;否则包版本漂移会以构建失败或运行时行为变化的形态冒出来。

易错点

  • 忽略固定版本告警:镜像构建不可复现,环境问题难以追查
  • 失败阈值放太松(只报 error):常见风险被静默放过
  • 把检查局限在本地编辑器:CI 没有门禁,团队默认状态仍是随手书写
  • 忽略清单只增不减:DL 告警长期存在,慢慢变成背景噪声

数据来源与参考

  • Hadolint 官方仓库(github.com/hadolint/hadolint)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌