cgroups是Docker用于防止DDoS攻击耗尽资源的安全机制,它通过为容器设置CPU、内存、磁盘IO等资源硬上限,防止单个容器因攻击或故障耗尽宿主机资源。

靠资源配额限制容器行为,是防范DDoS攻击波及宿主机最直接有效的方式。核心在于不让单个容器无节制地占用CPU、内存、磁盘IO或网络带宽,从而避免因攻击流量触发的资源耗尽导致整个宿主机瘫痪或其它容器被拖垮。
用Cgroups设置硬性资源上限
Cgroups是Docker底层依赖的Linux机制,Docker通过它实现对容器资源的强制约束。所有配额都应在启动容器时明确指定,不设默认即等于不设防。
-
CPU限制:用
--cpus=1.5限制最多使用1.5个逻辑CPU核心;也可用--cpu-quota和--cpu-period做更精细的周期配额控制 -
内存限制:必须设置
--memory=512m(如512MB),同时建议搭配--memory-swap=512m禁用swap,防止内存溢出后转用磁盘加剧延迟 -
磁盘IO限制:对I/O密集型服务,用
--device-read-bps /dev/sda:10mb限制读取速率,防止单个容器打满磁盘吞吐
配合网络层做初步过滤
资源配额管的是“用了多少”,但前置拦截能减少“需要处理多少”。虽然Docker本身不提供WAF或速率限制,但可快速组合基础防护:
- 用
--network none或自定义bridge网络隔离不需要对外通信的容器 - 对外服务必加反向代理(如Nginx),在入口处配置
limit_req限制单IP请求频率 - 通过宿主机防火墙(如iptables或nftables)丢弃异常端口扫描或SYN洪泛包,减轻内核协议栈压力
运行时持续监控与响应
配额只是静态防线,需配合实时观测才能及时发现绕过或逼近阈值的行为:
- 用
docker stats查看各容器实时CPU、内存、网络IO占用,识别异常飙升实例 - 结合cAdvisor + Prometheus采集指标,对
container_memory_usage_bytes或container_cpu_usage_seconds_total设告警阈值(如内存持续超限80%达2分钟) - 预设应急脚本,当某容器连续触发OOMKilled或CPU超限告警时,自动执行
docker stop或docker update --memory=256m降级处理
配额不是万能的,但它让DDoS从“一击致瘫”变成“局部受限”。关键在启动即设、逐项覆盖、动态跟进。


















