问题修复
需要验证、检查或加固 Dockerfile…
适用场景:对现有 Dockerfile 做语法/lint、安全、最佳实践与性能审查,并在 CI/CD 或生产前加固。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
需要验证、检查或加固 Dockerfil通用
解决思路
- 使用本地文件资源:验证脚本 `scripts/dockerfile-validate.sh`;参考文件 `references/security_checklist.md`、`references/optimization_guide.md`、`references/docker_best_practices.md`;示例 Dockerfile `examples/*.Dockerfile`。
- 以仓库根目录为工作目录:`cd /path/to/repo`;设置 `SKILL_DIR="devops-skills-plugin/skills/dockerfile-validator"`、`TARGET_DOCKERFILE="Dockerfile"`(用户提供路径时替换)。
- 运行工具前验证输入:`test -f "$SKILL_DIR/scripts/dockerfile-validate.sh"`;`test -f "$TARGET_DOCKERFILE"`;任一失败则停止并报告确切缺失路径。
- 显式读取目标 Dockerfile:`sed -n '1,220p' "$TARGET_DOCKERFILE"`;长文件再读:`sed -n '220,440p' "$TARGET_DOCKERFILE"`。
- 运行主验证脚本:`bash "$SKILL_DIR/scripts/dockerfile-validate.sh" "$TARGET_DOCKERFILE"`。
- 可选捕获运行输出用于结构化报告:`bash "$SKILL_DIR/scripts/dockerfile-validate.sh" "$TARGET_DOCKERFILE" | tee /tmp/dockerfile-validator.out`。
- 按标准严重级别分类发现:`Critical` = 硬编码密钥/凭据、高风险上下文显式 root 运行、高影响安全策略失败;`High` = Checkov 容器加固失败、hadolint 可能导致不安全/不可靠构建的错误、缺失或不安全的运行时用户姿态(`USER`);`Medium` = `:latest` 镜像标签、缺失固定版本、缓存清理遗漏、构建缓存低效、分层安装反模式;`Low` = 风格/信息性指导、非阻塞优化建议。
- 无问题快速路径:若验证无 actionable findings,返回简洁通过摘要;不要打开参考文件;不要生成修复 diff。快速路径条件:脚本整体通过、无安全失败、无需要用户操作的 error/warning。
- 仅当存在发现时加载参考:按问题类别读取匹配参考文件,每个必需文件只读一次。映射:Secrets/root 用户/暴露敏感端口/加固缺口 -> `references/security_checklist.md`;镜像大小/层数/多阶段机会/缓存效率/`.dockerignore` 缺口 -> `references/optimization_guide.md`;标签固定/指令用法/COPY vs ADD/WORKDIR/CMD/ENTRYPOINT 约定 -> `references/docker_best_practices.md`。
- 显式读取参考命令:`sed -n '1,220p' "$SKILL_DIR/references/security_checklist.md"`;`sed -n '1,220p' "$SKILL_DIR/references/optimization_guide.md"`;`sed -n '1,220p' "$SKILL_DIR/references/docker_best_practices.md"`。
- 定向提取参考内容:`rg -n "USER|secrets|EXPOSE|HEALTHCHECK" "$SKILL_DIR/references/security_checklist.md"`;`rg -n "multi-stage|cache|layer|dockerignore" "$SKILL_DIR/references/optimization_guide.md"`;`rg -n "FROM|COPY|ADD|WORKDIR|CMD|ENTRYPOINT|latest" "$SKILL_DIR/references/docker_best_practices.md"`。
- 每次非快速路径运行都生成标准报告,模板为:`## Dockerfile Validation Report`;`- Target: <path>`;`- Command: bash <skill-script> <target>`;`- Overall result: PASS | FAIL | PARTIAL (fallback)`;`### Critical`、`### High`、`### Medium`、`### Low`(每项或 `None`);`### Recommended Fixes`(每个可操作问题给具体代码级修复);`### References Used`(只列实际读过的文件);`### Fallbacks Used`(`None` 或确切回退分支 + 原因)。
- 报告后询问是否应用修复;用户批准后修补 Dockerfile 并重跑验证。
- Fallback A(Python/工具安装受限):当脚本因工具安装失败退出(如 Python 缺失、包安装被阻止或受限环境)时,报告主失败及原因;运行最小手动检查:`DOCKERFILE_DIR="$(dirname "$TARGET_DOCKERFILE")"`;`docker build --no-cache -f "$TARGET_DOCKERFILE" "$DOCKERFILE_DIR"`(如果 Docker 可用);`grep -nEi "^[[:space:]]*FROM[[:space:]]+.*:latest" "$TARGET_DOCKERFILE" || true`;`grep -nEi "^[[:space:]]*(ENV|ARG)[[:space:]].*(password|secret|token|api[_-]?key)[[:space:]]*=" "$TARGET_DOCKERFILE" || true`;`grep -nEi "^[[:space:]]*USER[[:space:]]+(root|0(:0)?)$" "$TARGET_DOCKERFILE" || true`;`grep -nEi "^[[:space:]]*HEALTHCHECK[[:space:]]+" "$TARGET_DOCKERFILE" || true`;用 `PARTIAL` 分类输出并明确标注跳过的检查。
- Fallback B(hadolint 不可用但 Docker 可用):使用 hadolint 容器镜像:`docker run --rm -i hadolint/hadolint < "$TARGET_DOCKERFILE"`。
- Fallback C(无 Docker、无 hadolint/checkov):只运行基于正则的手动检查(Fallback A step 2),明确标记为 `PARTIAL`,并说明跳过了哪些扫描器。
- Quick Command Set:验证一个 Dockerfile:`cd /path/to/repo`;`bash devops-skills-plugin/skills/dockerfile-validator/scripts/dockerfile-validate.sh Dockerfile`。
- 验证其他文件:`cd /path/to/repo`;`bash devops-skills-plugin/skills/dockerfile-validator/scripts/dockerfile-validate.sh Dockerfile.prod`。
- 验证技能示例:`cd /path/to/repo/devops-skills-plugin/skills/dockerfile-validator`;`bash scripts/dockerfile-validate.sh examples/good-example.Dockerfile`;`bash scripts/dockerfile-validate.sh examples/security-issues.Dockerfile`。
- 运行回归检查(CI 入口):`cd /path/to/repo`;`bash devops-skills-plugin/skills/dockerfile-validator/scripts/test_validate.sh`。
- CI 严格模式(必须强制 ShellCheck):`STRICT_SHELLCHECK=true bash devops-skills-plugin/skills/dockerfile-validator/scripts/test_validate.sh`。
- 渐进披露规则:始终先读目标 Dockerfile;除非发现需要,不要读任何参考文件;只读问题映射匹配的参考文件;除非出现新问题类别,不要重读同一参考。
- 完成标准:触发匹配 Dockerfile 验证/lint/安全/优化请求;目标 Dockerfile 路径已显式验证;执行验证命令或明确回退;按 `Critical`、`High`、`Medium`、`Low` 报告发现;参考使用匹配问题类别并显式列出;无问题快速路径跳过不必要参考读取;若应用修复,重跑验证并报告最终状态。
适用边界 · 注意事项
- 不要用于从零生成新的 Dockerfile(应使用 `dockerfile-generator`)。
- 不要用于运行容器、调试运行时行为或镜像仓库操作。
- 没有目标 Dockerfile 或无验证/lint/安全/优化需求时不要用。