对docker容器进行网络限速

AI摘要

正在生成中……


可以通过创建自定义网络并结合 tc(Traffic Control)工具为 Docker 容器实现上传和下载限速。虽然 Docker 本身没有直接的限速功能,但通过 tc,你可以控制指定网络接口的带宽。

实现步骤:

1. 创建自定义 Docker 网络

首先,创建一个自定义 Docker 网络,这个网络本身不会限制速度,但会作为我们使用 tc 限速的目标:

1
2
3
4
docker network create \
--driver=bridge \
--opt "com.docker.network.bridge.name=alist_bridge" \
alist_limit_net

2. 使用 tc 限制带宽

接下来,使用 Linux 的 tc 命令为 alist_bridge 接口设置上传和下载的带宽限制为 1Mbps(即大约 128KB/s)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 清除现有的 tc 规则
sudo tc qdisc del dev alist_bridge root 2>/dev/null

# 为 alist_bridge 设置流量控制
sudo tc qdisc add dev alist_bridge root handle 1: htb default 11

# 上传 (出站) 限制为 1Mbps
sudo tc class add dev alist_bridge parent 1: classid 1:1 htb rate 1mbit
sudo tc filter add dev alist_bridge protocol ip parent 1:0 prio 1 u32 match ip src 0.0.0.0/0 flowid 1:1

# 下载 (入站) 限制为 1Mbps
sudo tc class add dev alist_bridge parent 1: classid 1:2 htb rate 1mbit
sudo tc filter add dev alist_bridge protocol ip parent 1:0 prio 1 u32 match ip dst 0.0.0.0/0 flowid 1:2

解释:

  1. tc qdisc add dev alist_bridge root handle 1: htb default 11:在 alist_bridge 网桥上添加根队列调度器(qdisc),使用 HTB(层次令牌桶)控制。
  2. tc class add dev alist_bridge parent 1: classid 1:1 htb rate 1mbit:为网络接口设置 1Mbps 的带宽限制。
  3. tc filter add dev alist_bridge ...:为所有流量(上传和下载)应用上述限速。

显示详细的流量统计,包括传输的数据包数量、速度等

1
sudo tc -s qdisc show dev alist_bridge

结果:

所有连接到 alist_limit_net 网络的 Docker 容器将会受到 1Mbps(大约 128KB/s)上传和下载带宽的限制。

3. 运行容器并使用限速网络

你可以通过以下命令运行 Docker 容器并使用这个限速网络:

1
docker run -d --network alist_limit_net --name="my_container" your_image

这样,每一个使用 alist_limit_net 网络的 Docker 容器都会自动应用 1Mbps 的上传和下载限速。

注意:

  • 如果 tc 出现冲突或配置异常,可以先删除已存在的流量控制规则:

    1
    sudo tc qdisc del dev alist_bridge root