Docker为它创建的每个容器创建一个连接到网桥(veth
)的docker0
接口(interface)。
http://docs.docker.io/use/networking/
我想限制这些新veth
接口(interface)的带宽。我找到了一种使用Wondershaper做到这一点的方法。但是我想使它自动化。
有没有一种方法可以使钩子(Hook)在每次附加新的veth
接口(interface)时都运行脚本?
我已经研究过在/etc/network/if-up.d/
中添加脚本,但是仅在引导过程中添加veth
时它们不会运行。
这是一些我试图获得通知的系统日志。我知道我可以跟踪这些日志,但是该方法似乎有点不可靠,必须有一种方法可以通过OS来获得有关此事件的通知。
May 2 23:28:41 ip-10-171-7-2 kernel: [22170163.565812] netlink: 1 bytes leftover after parsing attributes.
May 2 23:28:42 ip-10-171-7-2 kernel: [22170163.720571] IPv6: ADDRCONF(NETDEV_UP): veth5964: link is not ready
May 2 23:28:42 ip-10-171-7-2 kernel: [22170163.720587] device veth5964 entered promiscuous mode
May 2 23:28:42 ip-10-171-7-2 avahi-daemon[1006]: Withdrawing workstation service for vethdc8c.
May 2 23:28:42 ip-10-171-7-2 kernel: [22170163.743283] IPv6: ADDRCONF(NETDEV_CHANGE): veth5964: link becomes ready
May 2 23:28:42 ip-10-171-7-2 kernel: [22170163.743344] docker0: port 27(veth5964) entered forwarding state
May 2 23:28:42 ip-10-171-7-2 kernel: [22170163.743358] docker0: port 27(veth5964) entered forwarding state
May 2 23:28:48 ip-10-171-7-2 kernel: [22170170.518670] docker0: port 26(vethb06a) entered forwarding state
May 2 23:28:57 ip-10-171-7-2 kernel: [22170178.774676] docker0: port 27(veth5964) entered forwarding state
最佳答案
您应该编写一个自定义的udev
规则,该规则在每次添加新接口(interface)时运行您自己的脚本。这就是Debian处理接口(interface)“hotplug”的方式。/etc/udev/rules.d/90-my-networking.rules
:
SUBSYSTEM=="net", RUN+="/usr/local/bin/my-networking-agent.sh"
/usr/local/bin/my-networking-agent.sh
:#!/bin/sh
logger "hey I just got interface ${INTERFACE} with action ${ACTION}"
编辑
您可以通过以下方法进行测试:
# modprobe dummy0
# ifconfig dummy0 up
# tail -n1 /var/log/syslog
May 3 01:48:06 ernst logger: hey I just got interface dummy0 with action add