运行中容器的cpu和内存硬限制可动态调整,但需docker≥20.10、cgroup v2启用且容器未挂载legacy cgroup;--cpus可任意增减,--memory下调不得低于当前rss,端口、卷、环境变量等静态配置不可热更新。

运行中容器的资源配额硬限制可以动态调整,但必须满足前提条件且仅限特定参数——不是所有限制都能改,也不是任何时候都能改。
CPU硬限制:用 --cpus 实时调上限
这是最常用、最稳妥的动态调整项。--cpus=2.5 表示容器每 100ms 最多使用 250ms 的 CPU 时间(即等效 2.5 核),直接生效,无风险。
- 命令示例:
docker update --cpus=1.2 my-app - 值可增可减,下调不会中断进程,只影响后续调度分配
- 容器内可通过
cat /sys/fs/cgroup/cpu.max查看新配额(如120000 100000表示 1.2 核)
内存硬限制:-m 或 --memory 能调,但有严格约束
内存硬限制支持热更新,但新值不能低于容器当前实际占用的物理内存(RSS),否则 Docker 拒绝修改并报错。
- 命令示例:
docker update --memory=768m --memory-swap=768m my-app(禁用 swap) - 若当前 RSS 是 620MB,设 -m 512m 会失败;设 -m 1g 则立即生效
- 调整后检查:
docker exec my-app cat /sys/fs/cgroup/memory.max(单位字节)
必须提前确认的三项前提
缺一不可,否则 docker update 对硬限制可能静默失效或报错。
- Docker 版本 ≥ 20.10(推荐 27.x):
docker version --format '{{.Server.Version}}' - 宿主机启用 cgroup v2:
cat /proc/1/cgroup | head -1输出含unified或0::/ - 容器未挂载到 legacy cgroup v1 路径(如没用
--cgroup-parent指向/sys/fs/cgroup/cpu/xxx)
哪些硬限制根本不能动态改?
以下配置属于静态定义,运行中无法通过 docker update 修改,强行操作会提示 “invalid argument” 或被忽略:
- 端口映射(-p)、挂载卷(-v)、环境变量(-e)
- 网络模式(--network)、DNS 设置、主机名
- 安全能力(--cap-add)、用户身份(-u)、特权模式(--privileged)
- 镜像本身、入口点(--entrypoint)、工作目录(-w)











