docker镜像安全规范以“可信来源、最小攻击面、可验证、可审计”为核心,覆盖构建(禁用latest、trivy扫描阻断、多阶段构建)、内容(alpine/distroless、非root用户、chown声明)、分发(harbor内容信任、cosign签名、语义化标签)和运行(只读根、能力限制、真实healthcheck)全链路。

Docker 镜像安全规范不是一套固定模板,而是围绕“可信来源、最小攻击面、可验证、可审计”四个核心目标,结合构建、分发、运行全链路制定的可执行规则。重点不在罗列条目,而在明确每条规范背后的约束逻辑和落地动作。
一、基础镜像与构建源头必须可控
- 只允许使用官方签名镜像(如
nginx:1.25.4-alpine,而非nginx:latest),版本号精确到补丁级; - 禁止直接拉取未经扫描的第三方镜像,CI 流程中强制集成 Trivy 扫描,高危 CVE 未修复则阻断构建;
-
.dockerignore文件必须包含.git、node_modules、*.log、secrets/等敏感路径,防止意外打包; - 多阶段构建成为默认要求:构建阶段用完整工具链,生产阶段只 COPY 编译产物和必要依赖,彻底剥离
gcc、make等非运行时组件。
二、镜像内容必须最小化且权限收敛
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
- 基础镜像优先选
alpine或distroless,禁止使用ubuntu:latest或centos:stream等通用发行版; - 运行时必须切换非 root 用户:
RUN addgroup -g 1001 -r appgroup && \ adduser -S appuser -u 1001 -G appgroup USER 1001:1001 - 所有
COPY指令需显式声明所有权:COPY --chown=appuser:appgroup ./src /app/src,避免文件继承宿主机 root 权限; - 禁止在镜像中安装调试工具(
bash、curl、netstat),确需诊断能力的,通过kubectl exec --it --sh等外部方式临时注入。
三、分发与部署环节必须强验证
- 私有仓库(如 Harbor)强制启用内容信任(Content Trust),
DOCKER_CONTENT_TRUST=1环境下才允许docker push; - 镜像推送前必须用
cosign签名:cosign sign --key cosign.key registry.example.com/app:v1.2.3; - 生产环境拉取镜像时,配置
notary客户端或 Harbor 的自动签名验证策略,未签名或签名失效的镜像拒绝启动; - 镜像标签必须语义化,禁止
latest,推荐组合:v1.2.3,sha256-abc123...,prod-20260729。
四、运行时约束必须嵌入镜像定义本身
- Dockerfile 中明确声明安全运行参数(虽由
docker run执行,但应作为规范写入 README 和 CI 检查项):-
--read-only(根文件系统只读) -
--cap-drop=ALL --cap-add=NET_BIND_SERVICE(按需授权,禁用SYS_ADMIN等危险能力) -
--security-opt no-new-privileges(阻止进程提权)
-
-
HEALTHCHECK必须真实有效,不能只是curl -f http://localhost/health,而应检查关键依赖(如数据库连接、缓存可用性)。
不复杂但容易忽略。规范的价值不在文档厚度,而在每一条能否被自动化检查、被 pipeline 拦截、被 audit 工具验证。










