docker 中控制单容器磁盘 i/o 权重的官方参数是 --blkio-weight,取值范围10–1000,默认500,仅在i/o竞争时按权重分配相对带宽,需宿主机启用blkio控制器且使用cfq/bfq调度器。

在 Docker 中,没有名为 “Runtime-Constraint” 的官方参数或机制。你提到的这个词不是 Docker CLI、Docker Engine 或 Linux Cgroups 的标准术语。实际用于控制单容器磁盘 I/O 权重的参数是 --blkio-weight,它基于 Linux cgroup v1 的 blkio 子系统实现。
什么是 blkio 权重(--blkio-weight)
该参数为容器设置块设备 I/O 调度权重,取值范围为 10–1000(默认 500)。数值越高,在多个容器同时争抢同一块设备(如 /dev/sda)的读写资源时,获得的 I/O 带宽比例越大。
- 权重仅在 I/O 竞争发生时起作用;设备空闲时,所有容器均可自由使用全部带宽
- 不保证绝对速率(比如“必须达到 20MB/s”),只提供相对优先级
- 仅对默认 I/O 调度器(如 CFQ/BFQ)生效,不适用于 noop/deadline
如何正确配置 I/O 权重
启动容器时直接传入 --blkio-weight 参数即可:
docker run -d \ --blkio-weight 900 \ --name high-priority-db \ -v /data:/var/lib/postgresql/data \ postgres:15
- 该容器在与其它容器(如权重为 300 的日志采集容器)共用同一磁盘时,将获得约 3 倍的 I/O 时间片分配
- 若需对不同设备分别设权(例如 /dev/sdb 与 /dev/sdc),需配合
--device-read-bps或--device-write-iops单独限速
验证和调试方法
进入容器所在 cgroup 目录可确认配置是否生效:
# 查看容器对应的 blkio.weight 值(需 root 权限) cat /sys/fs/cgroup/blkio/docker/<container-id>/blkio.weight </container-id>
- 输出应为对应整数(如 900),非 0 表示已成功加载
- 若目录不存在或报错,说明宿主机未启用 blkio 控制器(检查
docker info | grep "Cgroup Driver"是否为cgroupfs,且内核支持 blkio)
常见误区提醒
避免混淆以下概念:
-
--blkio-weight-device:已弃用(Docker 20.10+ 不再支持),不可用于新版环境 -
--device-read-bps和--device-write-iops:属于硬性限速,与权重机制正交,可叠加使用 - “Runtime-Constraint” 并非 Docker 官方概念——可能是误记、文档翻译偏差或某私有平台封装的别名,建议以 Docker CLI 文档为准











