可以动态调整容器CPU份额和内存配额,但需满足Docker≥20.10、cgroup v2启用等前提;--cpu-shares影响调度权重,--cpus设硬上限,--memory设内存硬限制(不得低于当前RSS),--memory-reservation设软限制。
可以在容器运行中直接用 docker update 命令调整 cpu 份额和内存配额,但需满足版本、内核与配置前提,且操作有明确边界。
CPU 份额的动态调整
CPU 份额指容器在资源竞争时获得 CPU 时间的相对权重,不设硬上限,只影响调度优先级。Docker 支持运行中更新 --cpu-shares(默认 1024),值越大,争抢时越容易分到更多时间片。
- 命令示例:
docker update --cpu-shares=2048 my-container - 注意:该参数仅在多个容器同时高负载时生效;单容器空闲时不受限
- 若需硬性限制(如最多用 1.5 核),应使用
--cpus=1.5,它同样支持热更新,且会立即写入 cgroup v2 的cpu.max
内存配额的动态调整
内存支持硬限制(--memory)和软限制(--memory-reservation)两类热更新:
-
硬限制:设置容器可用物理内存上限,例如
docker update --memory=1g my-container。新值不能低于当前 RSS 使用量,否则报错并拒绝修改 -
软限制:用
--memory-reservation=512m设定保障下限,内核内存紧张时优先保留这部分内存,不影响容器峰值使用 - 若启用 swap,须同步指定
--memory-swap(如--memory-swap=1g),禁用 swap 则设为与--memory相同值
必须确认的前提条件
不是所有环境都支持热更新,执行前请验证:
- Docker 版本 ≥ 20.10(推荐 27+):
docker version --format '{{.Server.Version}}' - 宿主机启用 cgroup v2:
cat /proc/1/cgroup | head -1输出含unified或0::/ - 容器未使用 legacy cgroup v1 挂载(如通过
--cgroup-parent手动指定旧路径)
验证是否生效
调整后建议立刻检查容器内 cgroup 接口:
- CPU 配额:
docker exec my-container cat /sys/fs/cgroup/cpu.max(格式如250000 100000表示 2.5 核) - 内存上限:
docker exec my-container cat /sys/fs/cgroup/memory.max(单位字节,max表示无限制) - 实时监控:
docker stats my-container --no-stream查看当前使用率是否贴近新设定值


















