在Docker容器接口上应用NetEM WAN延迟
我想将NetEm延迟应用于docker集装箱的出口stream量。 通常我运行:
# /sbin/tc qdisc add dev $INTERFACE root netem delay ${DELAY}ms
问题是我不知道容器连接到的接口。
例如,我正在运行以下容器:
docker run --rm -it alpine /bin/sh
然后我ping 8.8.8.8:
/ # ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8): 56 data bytes 64 bytes from 8.8.8.8: seq=0 ttl=44 time=39.783 ms 64 bytes from 8.8.8.8: seq=1 ttl=44 time=39.694 ms
我想要做的是从我的主机添加NetEm规则并查看更改的ping时间。
如果我运行ifconfig
,我看到几个虚拟以太网接口 (因为其他容器正在运行),但我不知道哪一个连接到我感兴趣的容器:
# ifconfig veth09fa1c5 Link encap:Ethernet HWaddr 96:73:c9:15:93:b8 inet6 addr: fe80::9473:c9ff:fe15:93b8/64 Scope:Link ..... vethf05ef93 Link encap:Ethernet HWaddr ca:ea:97:ef:cd:9d inet6 addr: fe80::c8ea:97ff:feef:cd9d/64 Scope:Link .....
我相信我必须将NetEm规则应用到这些接口之一。 那是对的吗?
veth路线似乎不那么简单,但我认为这可能是可行的基于这个答案 。
但是,默认情况下(使用网桥接口),来自和去往容器虚拟接口的请求将通过默认网桥接口docker0
。
你可以在那里设置NetEm规则,但是也会减慢你所有的其他容器。 如果这是一个选项,运行你的容器在一个单独的networking(创build与docker network create
)将是一个更干净的方式来做到这一点的实验/testing。
docker network create slownet docker network inspect slownet [ { "Name": "slownet", "Id": "535e40d880716a27efe1fd3fada62bdc4d9fa13bde09279de650fa53f13f7cdd", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "172.19.0.0/16", "Gateway": "172.19.0.1/16" } ] }, "Internal": false, "Containers": {}, "Options": {}, "Labels": {} } ] ifconfig .... br-535e40d88071 Link encap:Ethernet HWaddr 02:42:4E:B6:F8:C2 inet addr:172.19.0.1 Bcast:0.0.0.0 Mask:255.255.0.0 inet6 addr: fe80::42:4eff:feb6:f8c2%32727/64 Scope:Link UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:180 errors:0 dropped:0 overruns:0 frame:0 TX packets:180 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:14368 (14.0 KiB) TX bytes:16888 (16.4 KiB) .... # so br-535e40d88071 is the interface
让我们旋转容器并开始ping:
host> docker run -ti --rm --net=slownet alpine sh container> ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8): 56 data bytes 64 bytes from 8.8.8.8: seq=114 ttl=37 time=0.251 ms
然后添加NetEm规则:
host> tc qdisc add dev br-535e40d88071 root netem delay 100ms
当发生这种情况时,我看到延迟的增加:
64 bytes from 8.8.8.8: seq=115 ttl=37 time=0.693 ms 64 bytes from 8.8.8.8: seq=116 ttl=37 time=101.086 ms 64 bytes from 8.8.8.8: seq=117 ttl=37 time=104.056 ms
- Docker:uwsgi无法启动
- Docker组成Nginx / PHP-FPM / Composer
- 如何从Docker容器运行Caddy? (443绑定:权限被拒绝)
- GKE泊坞亭容器内缺lessNET I / O统计值
- Rails 5,Kubernetes和Google Container Engine
- Docker – 无法从Container中Ping服务器IPv6或外部IPv6地址
- python TypeError:必须是没有NULL字节的编码string,而不是str – docker iron requirements.txt
- Docker的nginx容器:http代码400
- Docker命令在构build期间失败,但在运行容器内执行时成功