怎么在Docker中配置容器的网络流量监控与限速

风杰姑娘_1564

风杰姑娘_1564

2026-04-04

629人浏览

原创

docker容器网络监控与限速需借助linux内核工具:先通过docker inspect和ip link定位veth接口及pid,再用nsenter进入网络命名空间;以tc在veth主机端配置egress限速,用/sys/class/net/eth0/statistics/读取rx_bytes/tx_bytes实现轻量级流量监控。

怎么在docker中配置容器的网络流量监控与限速

在 Docker 中直接配置容器的网络流量监控与限速,不能靠 Docker 原生命令(如 docker run)原生支持完整限速或实时流量统计,需借助 Linux 内核工具(tc、iptables、ip)配合容器网络命名空间实现。核心思路是:定位容器对应的虚拟网卡(veth),进入其网络命名空间,再用 tc 限速、用 iptables 或 cat /sys/class/net/.../statistics/ 统计流量。

找到容器对应的 veth 接口和网络命名空间

Docker 容器默认使用 bridge 网络(如 docker0),每个容器在宿主机上对应一个 veth 设备(如 vethabc123),一端连宿主机,一端连容器内部。要操作容器网络,必须先找到它:

  • 运行 docker inspect | grep -A 10 "NetworkSettings",记下 IPAddress 和 MacAddress
  • 执行 ip link show | grep -B1 '<macaddress>'</macaddress> 或 ls -l /sys/class/net/veth*/address | grep <macaddress></macaddress>,定位到宿主机上的 veth 名称(如 vethabcd12)
  • 获取容器 PID:docker inspect -f '{{.State.Pid}}',假设为 12345
  • 进入容器网络命名空间:nsenter -t 12345 -n ip addr 可验证是否成功

用 tc 实现出口(egress)限速

tc(traffic control)只能在**出方向**(即容器发往外部)做精细限速;入方向(ingress)限速需用 ifb 模块,较复杂,一般推荐对出向限速已能满足多数场景(如限制容器上传带宽):

  • 在宿主机上,对容器对应的 veth 主机端(如 vethabcd12)添加 HTB 队列规则:
    tc qdisc add dev vethabcd12 root handle 1: htb default 30
  • 添加一个限速类(例如限 2Mbps):
    tc class add dev vethabcd12 parent 1: classid 1:1 htb rate 2mbit
  • 将容器所有流量导向该类(匹配 IP):
    tc filter add dev vethabcd12 protocol ip parent 1:0 prio 1 u32 match ip src flowid 1:1

注意:限速作用于 veth 的主机侧,且仅影响容器发出的流量(即容器 → 外部)。若需双向限速,建议在容器内(通过 nsenter 进入后)对 eth0 配置,但需容器内有 tc 工具且具备 CAP_NET_ADMIN 权限(启动时加 --cap-add=NET_ADMIN)。

监控实时流量(进出字节数)

最轻量、无依赖的方式是读取内核暴露的网卡统计接口:

  • 查容器内 eth0 流量(需进入容器命名空间):
    nsenter -t 12345 -n cat /sys/class/net/eth0/statistics/rx_bytes(接收字节数)
    nsenter -t 12345 -n cat /sys/class/net/eth0/statistics/tx_bytes(发送字节数)
  • 定期采集并计算差值即可得速率(如每秒增量)。可用简单 shell 脚本循环 + sleep 实现基础监控
  • 替代方案:用 iptables 计数器(更灵活,支持按协议/端口过滤):
    nsenter -t 12345 -n iptables -A OUTPUT -d 10.0.0.0/8 -j ACCEPT
    然后 nsenter -t 12345 -n iptables -L OUTPUT -v -n 查看包/字节计数

简化实践:用 ctop 或 NetData 快速可视化

若不需要底层控制,只想快速查看和粗略限速,可借助第三方工具:

  • ctop:类 top 的容器监控工具,安装后运行 ctop 即可看到各容器实时网络 I/O(RX/TX KB/s),无需额外配置
  • NetData:在宿主机部署,自动发现 Docker 容器,提供图形化流量、连接数、丢包等指标,支持告警
  • docker stats --no-stream:虽不显示网络细节,但配合 --format 可输出网络 I/O 字节数(Docker 20.10+ 支持 .Networks.<netname>.RxBytes</netname>)

不复杂但容易忽略的是:所有基于 veth 的操作都依赖容器处于运行状态,且 veth 名称每次重启容器都会变,自动化脚本中建议用 docker network inspect + ip link 动态解析,而非写死接口名。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1709

3

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.06.27

1211

7

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

2023.10.19

3128

3

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

2025.10.17

4809

12

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2025.12.29

3769

9

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

2026.01.19

446

15

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

2024.01.03

3796

7

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

2025.12.06

306

9

default gateway怎么配置
default gateway怎么配置

配置default gateway的步骤:1、了解网络环境;2、获取路由器IP地址;3、登录路由器管理界面;4、找到并配置WAN口设置;5、配置默认网关;6、保存设置并退出;7、检查网络连接是否正常。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.12.07

357

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.7万人学习