可以问ai啊
方法 1:使用 tc
(Traffic Control) 直接限制容器网速
适用于所有网络模式(bridge
、host
、自定义等),但需要宿主机权限。
步骤
-
找到容器的虚拟网卡(veth)
# 1. 获取容器的 PID
docker inspect -f '{{.State.Pid}}' <容器名或ID>
# 2. 进入容器的网络命名空间
nsenter -t -n ip a
找到 eth0
对应的宿主机端 veth
设备(通常名称如 vethXXXXXX
)。
-
使用 tc
限制带宽
# 限制为 10Mbps(上传/下载均生效)
tc qdisc add dev root tbf rate 10mbit burst 256kbit latency 50ms
# 查看限制
tc qdisc show dev
# 删除限制
tc qdisc del dev root
方法 2:通过 --blkio-weight
和 --device-read/write-bps
(仅限磁盘 IO)
⚠️ 注意:Docker 原生参数(如 --blkio-weight
)仅限制磁盘 IO,不能直接限制网络带宽。若需网络限速,需结合 tc
或第三方工具。
方法 3:使用 --network
和自定义桥接网络(推荐)
适用于 bridge
模式,通过创建自定义网络并设置 tc
规则。
步骤
- 创建自定义桥接网络
docker network create --driver bridge my_limited_network
- 启动容器并加入该网络
docker run --network my_limited_network --name my_container -d nginx
- 在宿主机上限制该桥接网卡(
br-XXXXXX
)的带宽
# 找到自定义网络的桥接设备
brctl show my_limited_network
# 限制带宽(例如 5Mbps)
tc qdisc add dev br-XXXXXX root tbf rate 5mbit burst 256kbit latency 50ms