docker update 是 docker 原生命令,仅支持动态调整运行中容器的 cpu(--cpus、--cpuset-cpus 等)、内存(-m、--memory-swap 等)、io(--blkio-weight、--device-read-bps 等)、进程数(--pids-limit)和重启策略(--restart)等运行时资源限制,不支持修改环境变量、端口映射、挂载卷等静态配置。

docker update 是 Docker 原生命令,专用于动态调整正在运行的容器的资源限制,无需重启容器。它不能修改镜像、环境变量、端口映射或挂载卷等静态配置,但对 CPU、内存、IO、进程数、重启策略等运行时参数支持实时生效。
哪些资源能用 docker update 调整?
-
CPU 类
-
--cpus=1.5:限制最多使用 1.5 个逻辑 CPU 核(推荐,cgroups v2 下效果明确) -
--cpuset-cpus=0-2:绑定容器只在 CPU 0、1、2 上运行 -
--cpu-shares=512:设置相对 CPU 权重(默认 1024,值越小优先级越低)
-
-
内存类
-
-m 512m或--memory=512m:硬限制,超限可能被 OOM Killer 终止 -
--memory-swap=1g:内存 + swap 总上限(需配合-m使用;设为-1表示不限 swap) -
--memory-reservation=256m:软限制,内存紧张时系统优先回收这部分
-
-
IO 与设备类
-
--blkio-weight=300:块设备 IO 相对权重(范围 10–1000) -
--device-read-bps /dev/sda:2mb:限制从 sda 读取速率 -
--device-write-iops /dev/sda:500:限制向 sda 写入 IOPS
-
-
其他运行时策略
-
--pids-limit=128:限制容器内最大进程/线程数(防 fork bomb) -
--restart=on-failure:3:更新退出后的重启行为(不立即生效,下次退出才触发)
-
怎么安全高效地执行 update?
- 只能作用于正在运行的容器(
docker ps中可见),停止状态的容器需先docker start - 多容器可批量操作:
docker update -m 256m app-web app-api app-db - 修改后可用
docker inspect查看HostConfig中的最新资源配置 - 内存下调要谨慎:若容器已占用超新限制,会立刻被内核 OOM Killer 杀掉
- CPU 调整一般无风险,但
--cpus值过小可能导致响应延迟上升
常见误操作提醒
- ❌ 不能改
-e ENV=xxx(环境变量)、-p 8080:80(端口)、-v /host:/container(挂载卷)
→ 这些必须重建容器:docker stop && docker run ... - ❌ 不影响镜像本身,重启或重部署后会恢复初始配置
→ 永久生效请改docker run命令或docker-compose.yml - ❌
--restart修改后不会重启当前容器,只影响后续异常退出时的行为
→ 如需立即应用重启策略,可手动docker restart
一个实用示例
# 将 webapp 容器 CPU 限制为 2 核、内存上限 1GB、IO 权重设为 400 docker update --cpus=2 --memory=1g --blkio-weight=400 webapp # 同时限制其最多使用 200 个进程,并禁止使用 swap docker update --pids-limit=200 --memory-swap=1g webapp
这些变更几秒内生效,服务持续在线。适合应对突发负载、资源争抢或精细化运维调度。











