计算 Docker 容器的带宽

Mar*_*ran 13 bandwidth iptables docker

我试图弄清楚如何跟踪来自 Docker 容器的带宽。

通常我使用--uid-owner作为标记来跟踪给定用户的带宽使用情况。但是,即使我以 docker 容器内的用户身份运行所有进程--uid-owner也无法正常工作。--uid-owner我没有使用,而是尝试只跟踪来自 docker 创建的虚拟以太网设备的所有数据包。

然而,这最终也无济于事:无论我尝试什么,都没有捕获到数据包。

出于绝望,我尝试将规则放在所有链条中,但都没有结果。

Chain PREROUTING (policy ACCEPT 3041 packets, 7849454 bytes)
num      pkts      bytes target     prot opt in     out     source               destination
1           0        0 MARK       tcp  --  veth5a36 any     anywhere             anywhere             MARK set 0x1

Chain INPUT (policy ACCEPT 273 packets, 23305 bytes)
num      pkts      bytes target     prot opt in     out     source               destination
1           0        0 MARK       tcp  --  veth5a36 any     anywhere             anywhere             MARK set 0x1

Chain FORWARD (policy ACCEPT 2750 packets, 7821109 bytes)
num      pkts      bytes target     prot opt in     out     source               destination
1           0        0 MARK       tcp  --  any    veth5a36  anywhere             anywhere             MARK set 0x1
2           0        0 MARK       tcp  --  veth5a36 any     anywhere             anywhere             MARK set 0x1
3           0        0            all  --  veth5a36 eth0    anywhere             anywhere             mark match 0x1

Chain OUTPUT (policy ACCEPT 293 packets, 80020 bytes)
num      pkts      bytes target     prot opt in     out     source               destination
1           0        0 MARK       tcp  --  any    veth5a36  anywhere             anywhere             MARK set 0x1

Chain POSTROUTING (policy ACCEPT 3043 packets, 7901129 bytes)
num      pkts      bytes target     prot opt in     out     source               destination
1           0        0 MARK       tcp  --  any    veth5a36  anywhere             anywhere             MARK set 0x1
Run Code Online (Sandbox Code Playgroud)

谁能告诉我如何成功标记 docker 容器中的包?最好使用,--uid-owner但此时我会采取任何措施:)

小智 0

不完全是你问的,但我认为它会完成工作。

\n\n

引用Docker 博客

\n\n
\n

接口级计数器

\n\n

由于每个容器都有一个虚拟以太网接口,因此您可能需要直接检查该接口的 TX 和 RX 计数器。

\n
\n\n

[...]

\n\n
\n

但目前,最好的方法是检查容器内的指标。\n 我\xe2\x80\x99m 不是在谈论在\n 容器中运行特殊代理,或类似的事情。我们将从主机环境运行可执行文件,但在容器的网络命名空间内。

\n\n

该命令的具体格式为:

\n\n

ip netns exec <nsname> <command...>

\n\n

例如:

\n\n

ip netns exec mycontainer netstat -i

\n
\n

  • 我对您的答案进行了大量重新格式化,尝试在未来的答案中以类似的风格引用资源,以使它们更有用。 (2认同)