镜像安全检查需分三步:一查来源可信性与基础镜像安全性,优先选官方、轻量、版本精确的镜像;二用trivy或docker scout扫描cve漏洞并阻断高危构建;三审查dockerfile和构建历史,杜绝危险命令、确保非root运行及多阶段构建。

直接做三件事:看镜像来源是否可信、查里面有没有已知漏洞、审构建过程有没有危险操作。不依赖单一工具,而是分层验证。
确认基础镜像是否安全可靠
镜像安全从起点就决定了一半。优先选官方维护、更新及时、体积最小的镜像。
- 用 alpine、distroless 或 scratch 替代 ubuntu/debian 等全量发行版,减少攻击面
- 指定精确版本号,例如
node:18.19.0-alpine,避免latest带来的不可控变更 - 通过
docker search --filter=is-official=true nginx确认是否为 Docker Hub 官方认证镜像 - 检查镜像更新频率——在 Docker Hub 页面查看 “Last pushed” 和 release note,过期半年以上的基础镜像慎用
扫描已知漏洞与组件风险
光靠“看起来干净”不行,得用工具主动挖出隐藏问题。
- 用 Trivy 快速扫描:
trivy image --severity HIGH,CRITICAL myapp:1.2,输出含 CVE 编号、影响组件和修复建议 - 启用 Docker Scout(Docker 官方集成):
docker scout cves myapp:1.2,支持本地离线分析,无需推送仓库 - 重点关注操作系统包(如 openssl、zlib)和语言依赖(npm/pip/gradle 锁文件),这两类占漏洞总数 80% 以上
- 对 CI/CD 流水线加阻断逻辑:扫描发现 CRITICAL 漏洞时自动失败构建,不生成镜像
审查构建历史与 Dockerfile 行为
很多风险藏在构建过程中——比如某一层写入了密钥又删掉,或用了 curl | sh 这类高危命令。
- 运行
docker history --format "{{.ID}}: {{.Command}}" myapp:1.2查看每层执行的指令 - 过滤危险模式:
docker history myapp:1.2 --format "{{.Command}}" | grep -E "(curl|wget).*sh$|chmod.*777|rm -rf /" - 检查是否全程使用非 root 用户:
USER指令应在 COPY 后、CMD 前生效,且 UID 不为 0 - 验证是否采用多阶段构建:最终镜像里不应出现
go、gcc、git等构建工具
真正有效的镜像安全检查不是一次动作,而是把这三步固化进开发流程——拉取前查源、构建后扫描、推送前审计。不复杂但容易忽略。











