在容器运行中可直接用 docker update 动态调整 cpu、内存等资源限制,需 docker 20.10+、cgroup v2 支持;命令如 --cpus=2.5、--memory=1g,但内存不可低于当前使用量,网络限速等不支持热更新。

在容器运行中直接调整 CPU、内存等资源限制是可行的,但需满足前提条件并使用正确命令。
确认 Docker 版本与运行时支持
Docker 20.10+ 默认使用 runc 运行时,支持运行中更新资源配额;旧版本或使用 containerd 自定义配置时需确认是否启用 live-restore 和 cgroup v2 支持。Linux 主机必须启用 cgroup v2(推荐),否则部分内存限制(如 --memory-swap)可能无法动态生效。
- 检查 cgroup 版本:
cat /proc/1/cgroup | head -1,输出含unified表示 cgroup v2 已启用 - 验证 Docker 是否支持动态更新:
docker version --format '{{.Server.Version}}'≥ 20.10
使用 docker update 修改运行中容器资源
docker update 是官方支持的动态调整方式,适用于已启动容器,无需重启。
- 限制 CPU 使用(份额/配额):
docker update --cpus=2.5 my-container(分配最多 2.5 个逻辑 CPU) - 限制内存上限:
docker update --memory=1g --memory-swap=1g my-container(禁用 swap 时--memory-swap需等于--memory) - 设置内存软限制(可超限):
docker update --memory-reservation=512m my-container - 限制 blkio 权重:
docker update --blkio-weight=300 my-container(范围 10–1000)
注意:修改立即生效,但某些值(如 --cpus)在容器内通过 cat /sys/fs/cgroup/cpu.max 查看时可能需稍等同步;若容器进程本身未主动响应调度变化,实际负载表现可能有延迟。
注意事项与常见限制
并非所有资源都能任意调整,部分操作会失败或被忽略。
- 不能降低内存限制至低于容器当前已使用量(会触发 OOM Kill),Docker 会报错
failed to update memory limit: invalid argument -
--pids-limit支持动态更新,但仅对新创建的进程生效,已有进程不受影响 - 网络带宽(
--network相关限速)不支持运行中更新,需通过tc等宿主机工具手动干预 - 挂载卷、端口映射、环境变量等非资源类配置无法用
docker update修改,必须重建容器
验证变更是否生效
调整后建议立即检查容器内 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观察实时 CPU / MEM 使用率是否受新配额约束
不复杂但容易忽略。










