docker update 只能动态修改资源限制(如 --cpus、--memory、--memory-reservation、--restart)和部分运行时策略,无法更改端口映射、挂载卷、环境变量、网络模式、CMD/ENTRYPOINT 等静态配置,后者必须重启容器或重建。`docker update` 命令用于**动态调整正在运行的容器的资源限制和重启策略**,但它**不能修改网络配置、挂载卷、环境变量、端口映射、CMD/ENTRYPOINT 等运行时不可变项**。简单说:它只管“资源配额”和“重启行为”,不管“怎么启动”。
哪些配置能用 docker update 修改?
以下参数可在容器运行中实时更新(无需重启):
-
--cpus:限制 CPU 核心数(如
--cpus=1.5) -
--memory / -m:限制内存上限(如
-m 512m或--memory 2g) - --memory-reservation:设置内存软限制(触发 OOM 前的预警阈值)
-
--restart:修改重启策略(如
--restart=on-failure:3) - --kernel-memory(已弃用,新版 Docker 中被移除,不建议使用)
哪些配置不能用 docker update 修改?
以下常见配置**修改后会报错或被忽略**,必须通过 docker run 重建容器:
- 端口映射(
-p 8080:80) - 挂载卷(
-v /host:/container) - 环境变量(
-e KEY=VAL) - 网络模式(
--network host)、自定义网桥、DNS 配置 - 容器名称(
--name)、主机名(--hostname) - 工作目录(
-w)、用户(-u)、CMD/ENTRYPOINT
实际操作示例
假设有一个正在运行的容器 webapp,想把它内存上限从默认调高到 1GB,CPU 限制为 2 核,并设为失败时最多重启 5 次:
docker update --memory 1g --cpus 2 --restart on-failure:5 webapp
执行后立即生效,可通过以下命令验证:
docker inspect webapp | jq '.[0].HostConfig.Memory, .[0].HostConfig.NanoCpus, .[0].HostConfig.RestartPolicy'
或更简洁地查看资源设置:
docker container stats webapp
注意事项
- 容器必须处于 running 或 paused 状态;已停止的容器无法 update(需先
start) - 降低内存限制时,若当前使用量超新限制,可能触发 OOM killer 杀死进程
- 修改
--restart不影响当前运行状态,只作用于下次退出后的重启行为 - Linux 宿主机需启用 cgroups v1 或 v2(Docker 默认支持),否则部分限制可能不生效


















