可通过--device-read-bps和--device-write-bps参数按宿主机设备路径(如/dev/sda)限制容器读写速率,单位支持b/k/m/g,可独立配置、多设备设置,需确保容器有设备访问权限且路径真实存在。

可以通过 docker run 的 --device-read-bps 和 --device-write-bps 参数限制容器对特定块设备的读写速率,从而防止磁盘 IO 过载。关键在于指定宿主机上的实际设备路径(如 /dev/sda),而非容器内挂载路径。
使用 --device-write-bps 限制写入带宽
该参数按设备路径设置每秒最大写入字节数,单位支持 b(字节)、k(KB)、m(MB)、g(GB):
-
--device-write-bps=/dev/sda:10mb:限制容器向/dev/sda写入不超过 10 MB/s - 可同时为多个设备设置,例如:
--device-write-bps=/dev/sda:5mb --device-write-bps=/dev/sdb:2mb - 注意:该限制作用于整个设备,若多个容器共用同一设备,速率是共享的
配合 --device-read-bps 控制整体 IO 压力
高读取也可能引发磁盘争用,建议同步限制读取速度:
-
--device-read-bps=/dev/sda:20mb:限制读取上限为 20 MB/s - 读写限速可独立配置,例如读快写慢,适合日志归档类场景
- 不设置对应参数即不限速,需显式声明才生效
验证设备路径与权限
容器必须有权限访问目标设备,且设备路径在宿主机上真实存在:
- 运行
lsblk或df -h查看容器实际使用的底层设备(如应用数据卷挂载在/mnt/data,其底层可能是/dev/nvme0n1p2) - 若使用
docker volume,需确认 volume 所在目录对应的物理设备 - 普通用户运行时可能需加
--privileged或通过udev规则授权设备访问(生产环境慎用--privileged)
替代方案:使用 --io-limit(仅适用于 devicemapper 存储驱动)
旧版 Docker 在 devicemapper 下支持 --io-limit,但已弃用;当前主流存储驱动(overlay2、zfs)不支持该参数。统一推荐使用 --device-*bps 方式,兼容性更好、语义更清晰。

















