【Linux】Docker update 深度解析:命令、常用参数与实战示例

👨‍🎓博主简介

  🏅CSDN博客专家

  🏅云计算领域优质创作者

  🏅华为云开发者社区专家博主

  🏅阿里云开发者社区专家博主

💊交流社区: 运维交流社区 欢迎大家的加入!

🐋 希望大家多多支持,我们一起进步!😄

🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏 ⭐️ 加关注+💗


文章目录

    • [1. 什么是 docker update?](#1. 什么是 docker update?)
    • [2. 命令格式](#2. 命令格式)
    • [3. 常用参数](#3. 常用参数)
    • [4. 实战示例](#4. 实战示例)
      • [4.1 在线扩容 CPU](#4.1 在线扩容 CPU)
      • [4.2 绑定到特定核心,防止干扰其他服务](#4.2 绑定到特定核心,防止干扰其他服务)
      • [4.3 限制内存并关闭 swap](#4.3 限制内存并关闭 swap)
      • [4.4 限制进程数,避免 fork bomb](#4.4 限制进程数,避免 fork bomb)
      • [4.5 修改 restart 策略(需重启容器)](#4.5 修改 restart 策略(需重启容器))
    • [5. 常见问题与排查](#5. 常见问题与排查)
    • [6. 小结与最佳实践](#6. 小结与最佳实践)

1. 什么是 docker update?

docker update 是一个 运行时(runtime) 命令,主要用来 在线调整 一个或多个容器的 资源限制 及一些容器策略。

2. 命令格式

bash 复制代码
docker update 参数 容器名称/ID

3. 常用参数

支持调整的维度及使用:

维度 参数 作用说明 使用示例
CPU --cpus 限制容器可用 CPU 核数。 docker update --cpus=1 容器名/ID
CPU --cpuset-cpus 绑定容器只能在指定 CPU 核心上运行。 docker update --cpuset-cpus=0-2,4 容器名/ID
内存 --memory, -m 内存硬限制,支持 b、k、m、g 单位。 docker update -m=512m 容器名/ID
内存 --memory-swap 内存 + swap 总和,值必须 ≥ --memory。 docker update --memory-swap=1g 容器名/ID
内存 --memory-reservation 软限制;系统内存紧张时回收。 docker update --memory-reservation=256m 容器名/ID
块 I/O权重 --blkio-weight 整体 I/O 权重,范围 10--1000。 docker update --blkio-weight=500 容器名/ID
块 I/O权重 --device-read-bps 按设备的读带宽限制(b/k/m/g)。 docker update --device-read-bps /dev/sda:10mb 容器名/ID
块 I/O权重 --device-write-bps 按设备的写带宽限制。 docker update --device-write-bps /dev/sda:5mb容器名/ID
块 I/O权重 --device-read-iops 按设备的读 IOPS。 docker update --device-read-iops /dev/sda:1000 容器名/ID
块 I/O权重 --device-write-iops 按设备的写 IOPS。 docker update --device-write-iops /dev/sda:800 容器名/ID
进程数 --pids-limit 容器内最大进程/线程数,防止 fork-bomb。 docker update --pids-limit=100 容器名/ID
重启策略 --restart 容器退出后的重启策略。 (如 no、always、unless-stopped、on-failure) 需重启容器生效。 docker update --restart=no 容器名/ID

⚠️ 注意:docker update 不支持修改环境变量、端口映射、网络模式、挂载卷等容器启动时指定的配置。

4. 实战示例

cpu、内存、磁盘IO等基本都是在HostConfig中,所以在验证的时候命令是:docker inspect test -f '{``{.HostConfig.要验证的信息json名称}}'

  • 初始创建容器:
bash 复制代码
docker run -itd --name test --cpus 1 --restart=always test:latest

4.1 在线扩容 CPU

bash 复制代码
# 容器创建时 1 核
# 业务高峰,临时加到 2 核
docker update --cpus 2 test

验证(可使用如下命令查看该容器多少核cpu):

bash 复制代码
docker inspect test -f '{{.HostConfig.NanoCpus}}' | awk '{printf "%.2f 核\n", $1/1000000000}'

4.2 绑定到特定核心,防止干扰其他服务

bash 复制代码
docker update --cpuset-cpus 2-3 test

验证:

bash 复制代码
docker inspect test -f '{{.HostConfig.CpusetCpus}}'

4.3 限制内存并关闭 swap

bash 复制代码
docker update --memory 512m --memory-swap 512m test
# memory-swap 与 memory 相等 => 禁止 swap

验证:

bash 复制代码
docker inspect test -f '{{.HostConfig.Memory}}' | awk '{printf "%d M\n", $1/1048576}'
docker inspect test -f '{{.HostConfig.MemorySwap}}' | awk '{printf "%d M\n", $1/1048576}'

4.4 限制进程数,避免 fork bomb

bash 复制代码
docker update --pids-limit 200 test

验证:

bash 复制代码
docker inspect test -f '{{.HostConfig.PidsLimit}}'

若是返回<nil>,表示创建时没有设置进程数,也就是等于无限制。

4.5 修改 restart 策略(需重启容器)

创建容器时配置了开机自启,然而我现在新创建了个容器,需要把之前容器的开机自启关了,命令如下:

bash 复制代码
docker update --restart no test
docker restart test   # 必须重启容器才生效

验证:

bash 复制代码
docker inspect test -f '{{.HostConfig.RestartPolicy.Name}}'

5. 常见问题与排查

  1. 更新没生效?

    • 必须容器处于 running 状态。
    • 某些旧内核不支持 cgroup v2,组合参数可能失败。
  2. Swap 限制失败?

    • 宿主机需要启用 swapaccount=1(GRUB 内核参数)。

6. 小结与最佳实践

  • 上线前 :在 docker run 或编排文件里预设合理资源。
  • 运行时 :利用 docker update 动态调整。
  • 监控 :结合 docker stats 观察实际用量。
  • 批量管理 :用 Ansible、Docker SDK、shell 脚本封装 docker update 调用。

🐋 希望大家多多支持,我们一起进步!😄

🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏 ⭐️ 加关注+💗

相关推荐
资深技术分享员3 小时前
Geejing WebBuilder 日志、在线用户、系统监控,出问题时的三个第一现场
java·运维·数据库
wtblszn3 小时前
光伏发电与光热发电有什么区别
大数据·运维·物联网
锅巴编程4 小时前
nginx-413-client-max-body-size
运维·nginx
GeW4 小时前
从代码到共识:技术突围如何映照大国相处之道
linux
蓝速科技4 小时前
仓储盘点移动终端选型与蓝速科技 K10 实战方案
运维·数据库·人工智能·科技·材质
溜达的大象4 小时前
极空间部署Traggo时间追踪工具:Docker安装、标签管理与cpolar远程访问
运维·docker·容器
wjjzhbb4 小时前
Jenkins到ArgoCD——GitOps持续交付实践
运维·缓存·jenkins·argocd
智商网输送线配件4 小时前
流水线全套配件直供化落地的三个实操切入维度
大数据·运维·自动化·智商网·流水线设备配件
承渊政道5 小时前
Linux系统学习【进程信号详细解析——认识、产生、保存以及捕捉信号】
linux·学习·ubuntu·ssh·vs code·进程信号
硅基手札5 小时前
【linux内核专栏01】Linux 内核心智模型与设计哲学
linux·运维·驱动开发·开源软件