可以,容器运行中可动态调整资源限制,需 docker 20.10+ 和 cgroup v2 支持,核心命令为 docker update;支持 cpu(--cpus、--cpuset-cpus、--cpu-shares)、内存(--memory、--memory-reservation 等)、blkio 权重、设备 io 速率、pids 限制等热更新,但内存下调不可低于当前使用量,端口/卷/环境变量等静态配置不支持动态修改。

容器运行中可以动态调整资源限制,但仅限于部分运行时参数,且必须满足系统和 Docker 版本前提。核心方法是使用 docker update 命令,无需重启容器,适用于生产环境快速响应负载变化。
CPU 限制可实时调高或调低
支持直接修改 CPU 使用上限和调度策略:
- --cpus=2.5:设为硬配额(推荐),表示每 100ms 最多用 250ms CPU 时间;值可增可减,无风险
- --cpuset-cpus="0-2":绑定物理核心,调整后立即生效,适合延迟敏感服务
- --cpu-shares=2048:仅在 CPU 竞争时起作用,不设硬上限,值越小优先级越低
内存限制调整需谨慎操作
内存类参数支持动态更新,但下调有触发 OOM Kill 的风险:
- -m 1g 或 --memory=1g:设硬上限,若容器当前已用超 1GB,命令会失败或立刻被杀
- --memory-swap=1g:必须与 -m 同时使用,设为等于 -m 表示禁用 swap
- --memory-reservation=512m:软限制,内存紧张时内核优先回收其 page cache,安全可调
其他可动态更新的资源类型
除 CPU 和内存外,以下运行时策略也支持热更新:
- --blkio-weight=300:块设备 IO 权重(范围 10–1000),影响磁盘读写优先级
- --device-read-bps /dev/sda:4mb:限制某设备读取速率,单位字节/秒
- --pids-limit=128:限制最大进程/线程数,防 fork bomb,对新进程生效
- --restart=on-failure:5:更新重启策略,下次异常退出时才按新规则执行
验证与注意事项
调整后应立即确认是否生效,并注意关键限制:
- 进入容器执行 cat /sys/fs/cgroup/cpu.max 或 cat /sys/fs/cgroup/memory.max 查看实际配置
- 宿主机上运行 docker stats --no-stream 容器名 观察实时使用趋势
- 不支持改端口、挂载卷、环境变量、网络模式等静态配置,这些必须重建容器
- 要求 Docker ≥ 20.10 + cgroup v2 启用(cat /proc/1/cgroup | head -1 含 unified)











