什么是Dockerfile 检查?
Dockerfile 检查工具内置 10 条高频最佳实践规则,覆盖基础镜像标签、ADD 与 COPY 的选择、apt-get 用法、镜像层数、非 root 用户与健康检查,并给出对应的 hadolint 规则编号。检查在浏览器本地完成。
怎么用Dockerfile 检查?
- 1粘贴 Dockerfile 内容。
- 2查看右侧检查结果,警告级问题优先处理。
- 3打开「只看警告」可过滤掉建议类提示。
- 4需要完整规则集时在 CI 中接入 hadolint。
在代码里怎么实现?
一次性操作用上面的工具,重复性工作建议固化到脚本或项目里。
CI 中接入完整规则
# 官方镜像,可直接在 CI 里跑 docker run --rm -i hadolint/hadolint < Dockerfile # 只把警告及以上视为失败 docker run --rm -i hadolint/hadolint hadolint --failure-threshold warning - < Dockerfile
常见错误与排查
| 现象 | 成因 | 修复 |
|---|---|---|
| 构建时 apt-get 报「Unable to locate package」 | apt-get update 与 install 写在两条 RUN 里,update 那层被缓存后索引已过期。 | 把 update 与 install 合并到同一条 RUN,并在末尾清理 /var/lib/apt/lists。 |
| 容器内文件属主是 root 导致挂载卷权限异常 | 缺少 USER 指令,进程以 root 身份运行。 | 创建非特权用户并在 CMD 之前切换 USER。 |
常见问题
这里的规则编号和 hadolint 一致吗?+
一致,便于你按编号查阅出处与完整说明。但本工具只实现了 10 条最常见的规则,不是 hadolint 的完整替代,正式项目仍建议在 CI 里接入 hadolint。
为什么建议合并 RUN 指令?+
每条 RUN 都会产生一个镜像层,层越多镜像越大、拉取越慢,而且在前一层里删除的文件并不会真正从镜像中消失。把相关命令用 && 合并,并在同一层内完成清理,才能真正减小体积。