当我想计算通过特定端口流出 Linux 系统的字节数时,我可以使用 iptables,添加可以在我需要时检查的特定规则。
例如,假设我需要知道通过端口 22 传出多少字节。我可以添加以下规则:
iptables -A OUTPUT -p tcp --sport 22
当我需要知道问题的答案时,我会运行:
iptables -L -nvx
或者如果我只需要字节:
iptables -L -nvx | grep :22 | awk '{ print $2 }'
我的问题是,如果该系统正在运行 Docker,则 iptables 会按照说明进行更改这里但我无法获得预期的效果(如果我重复上述过程,我总是得到 0 字节,即使知道那是该端口上的流量)。
有人可以解释一下在这种情况下如何获得相同的字节数吗?
答案1
在默认的 Docker 设置中,容器拥有自己的网络命名空间,与主机系统完全分离。
因此您的容器有一个单独的 iptables 实例。
如果要访问主机网络命名空间,则需要将其提供给容器。我没有足够的经验来知道是否可以同时使用主机网络命名空间和容器网络命名空间。
将主机网络命名空间带入容器内会破坏容器化带来的安全特性。