可直接用docker update --memory命令在运行中动态扩容内存硬限制,毫秒级生效,但仅支持增大、不可缩小,需docker≥20.10、cgroups v2启用且宿主机内存充足。
可以直接用 docker update --memory 命令在容器运行中修改内存硬限制,无需重启,毫秒级生效。
确认前提是否满足
执行前请确保:
- Docker 版本 ≥ 20.10(推荐 27+),运行
docker version --format '{{.Server.Version}}'查看 - 宿主机启用 cgroups v2:执行
cat /proc/1/cgroup | head -1,输出含unified或0::/ - 容器未使用 legacy cgroup v1(如没通过
--cgroup-parent指定旧路径) - 宿主机有足够空闲内存,否则更新会被内核拒绝
常用 docker update 内存操作
所有操作均作用于正在运行的容器:
- 设为 2GB:
docker update --memory=2g my-container - 同时禁用 swap:
docker update --memory=512m --memory-swap=512m my-container - 设软限制(保障下限):
docker update --memory-reservation=256m my-container - 查看当前值:
docker inspect -f '{{.HostConfig.Memory}}' my-container
验证是否生效
修改后建议立即检查容器内 cgroup 文件:
- 内存上限:
docker exec my-container cat /sys/fs/cgroup/memory.max(单位字节,如2147483648表示 2GB) - 注意:新值不能低于容器当前 RSS 使用量,否则命令会报错并拒绝修改
- 若启用 swap,
/sys/fs/cgroup/memory.swap.max也应同步更新(需对应配置--memory-swap)
哪些情况不支持或需谨慎
以下限制实际中容易忽略:
- 只能增大,不能缩小
--memory值(cgroups v2 不允许 runtime 缩小memory.max) - 无法通过该命令修改环境变量、端口映射、挂载卷、网络模式等静态配置
- 若容器已接近或超过新设限制,可能触发 OOM Killer 被强制终止
- Kubernetes 中默认不支持原地更新,需 v1.35+ 且 Pod 配置了
resizePolicy: { memory: NotRequired }











