Docker 安全最佳实践 14 条
Docker 安全 14 条军规:官方镜像、版本锁定、最小权限、网络分段、密钥管理、不暴露 daemon socket、资源限额、rootless 模式、漏洞扫描、镜像签名验证、日志监控等,按影响与实施难度排布。
直接回答:Docker 安全是个体系问题,14 条核心实践:用官方镜像并锁版本、保持 Docker 与宿主机更新、镜像最小化、最小权限运行(非 root)、网络分段、密钥用 Secrets、Dockerfile lint、绝不暴露 daemon socket、限资源、rootless 模式、镜像漏洞扫描、镜像签名验证 验签、日志集中监控。
高影响低难度(先做这些)
- 用官方镜像:Docker Hub 官方镜像有维护与安全响应
- 锁版本:选受支持的版本并固定审核过的 digest;标签可变,固定后仍需安全更新
- 保持更新:Docker 引擎与宿主机补丁及时打
- 最小权限:容器内
USER非 root;--cap-drop ALL按需加回 - 不暴露 daemon socket:
/var/run/docker.sock挂进容器 = 把宿主机钥匙交出去
高影响高难度(体系化建设)
- 镜像最小化:多阶段构建、distroless——攻击面随体积缩
- 网络分段:前后端分网络,数据库不出内部网络
- 密钥管理:Docker Secrets 或外部密钥系统,拒绝环境变量与硬编码
- Dockerfile lint:hadolint 进 CI,坏味道构建期拦截
- 资源限额:
--memory/--cpus防单个容器拖垮宿主 - rootless 模式:守护进程本身非 root 运行,纵深防御
- 漏洞扫描:Trivy 扫镜像进 CI,高危漏洞阻断发布
- 镜像签名验证:Docker Official Images 的 DCT 正在退役,新工作流评估 Sigstore/Cosign 或 Notation;签名不等于无漏洞
- 日志集中监控:容器日志与审计事件分别采集,保留容器 ID、镜像 digest 和事件时间。用一次测试操作确认记录能追到具体镜像与容器;镜像扫描和宿主机审计仍由相应安全工具负责。
常见问题(FAQ)
Q:14 条全做成本太高,最小可行集是什么?
A:官方镜像+锁版本、非 root 运行、不暴露 socket、漏洞扫描四条——只是起点,还要保护宿主机、身份和发布链。
Q:rootless 模式有什么限制?
A:部分网络能力(低端口绑定)与存储性能有损耗;追求极致兼容的场景可先只对非核心主机启用。
Q:K8s 环境这些还适用吗?
A:镜像和最小权限原则适用;K8s 常用 containerd/CRI-O,不能照搬 Docker daemon 配置,还需(RBAC、NetworkPolicy、PodSecurity)。共享内核容器不构成虚拟机级安全边界,不可信负载应另评估沙箱或虚拟机。
官方参考
本文依据官方文档整理,示例未在本文中进行运行验证。生产部署需按所用版本、权限和实际负载验证。