合规dockerfile是阻断供应链攻击的第一道防线,须选用带版本号的官方精简镜像(如python:3.11-slim-bookworm)、强制多阶段构建、禁用root权限、清除构建残留,并配套.dockeringore、label和healthcheck。

编写合规的 Dockerfile 是阻断容器供应链攻击的第一道防线。它不是单纯让镜像能跑起来,而是要从源头控制组件来源、限制权限、消除冗余、防止敏感信息泄露,并为后续扫描与验证留出结构支撑。
选用带版本号的官方精简基础镜像
不写 FROM node:latest 或 FROM python,必须明确指定长期支持(LTS)或稳定版标签,例如 node:20-alpine、python:3.11-slim-bookworm。Alpine 和 Debian Slim 镜像体积小、维护活跃、组件少,可显著降低 OS 层 CVE 数量。避免使用社区非官方镜像,尤其未签名、无更新记录的镜像。
强制多阶段构建并严格限定复制范围
将构建环境与运行环境彻底隔离,只把编译产物(如二进制、jar、dist 目录)显式复制到最终阶段:
- 构建阶段用完整工具链(如
golang:1.22),但不进入最终镜像 - 运行阶段用
alpine:3.20或gcr.io/distroless/static-debian12等最小化镜像 -
COPY --from=builder /app/dist ./而非COPY --from=builder /app .,杜绝误带源码、日志、.git、.env 等敏感文件
禁用 root 权限并清除构建残留
默认 root 运行是高危行为,需在最终阶段创建非特权用户并切换:
- 添加用户:
RUN addgroup -g 1001 -f appgroup && adduser -S appuser -u 1001 - 切换身份:
USER appuser:appgroup - 清理临时文件:所有
RUN指令末尾追加&& rm -rf /var/cache/apk/* /tmp/*(Alpine)或/var/lib/apt/lists/*(Debian) - 禁止在运行阶段执行
apk add、apt-get install等动态安装操作
配套管控:.dockerignore + LABEL + HEALTHCHECK
这些不是可选项,而是合规性基线要求:
-
.dockerignore必须包含:.git、node_modules、.env、*.log、secrets/、README.md -
LABEL注明关键元数据:maintainer、version、org.opencontainers.image.source(指向 Git 仓库地址)、org.opencontainers.image.revision(提交哈希) -
HEALTHCHECK提供运行时自检能力,便于平台自动识别异常容器并干预











