模拟Docker中的networking故障

我试图模拟docker中的部分/整个networking/容器故障,以查看我的应用程序在失败情况下的行为。 我已经开始使用pumba了,但是它并不正确。 更具体地说,这个命令在运行时失败,都通过pumba和直接在docker exec容器上运行:

tc qdisc add dev eth0 root netem delay 2000ms 10ms 20.00 

具有以下输出:

 RTNETLINK answers: Operation not permitted 

现在这里变得陌生。 它运行在我的服务容器内时,实际上它只在通过pumba运行时才起作用,而不是在直接运行(rabbitmq:3.6.10,redis:4.0.1,mongo:3.5.11)后安装iproute2软件包。 它在我的应用程序容器内不起作用,所有这些容器都使用node:8.2.1作为基本映像,它已经安装了iproute2。 没有容器应用任何add_caps。

ip addr在其中一个应用程序容器上的输出:

 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1 link/ipip 0.0.0.0 brd 0.0.0.0 3: gre0@NONE: <NOARP> mtu 1476 qdisc noop state DOWN group default qlen 1 link/gre 0.0.0.0 brd 0.0.0.0 4: gretap0@NONE: <BROADCAST,MULTICAST> mtu 1462 qdisc noop state DOWN group default qlen 1000 link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff 5: ip_vti0@NONE: <NOARP> mtu 1332 qdisc noop state DOWN group default qlen 1 link/ipip 0.0.0.0 brd 0.0.0.0 6: ip6_vti0@NONE: <NOARP> mtu 1500 qdisc noop state DOWN group default qlen 1 link/tunnel6 :: brd :: 7: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1 link/sit 0.0.0.0 brd 0.0.0.0 8: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN group default qlen 1 link/tunnel6 :: brd :: 9: ip6gre0@NONE: <NOARP> mtu 1448 qdisc noop state DOWN group default qlen 1 link/gre6 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 brd 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 113: eth0@if114: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:12:00:06 brd ff:ff:ff:ff:ff:ff inet 172.18.0.6/16 scope global eth0 valid_lft forever preferred_lft forever 

好的,我find了答案的一部分。 事实certificate,直接在服务容器上运行时,tc命令不起作用。 对不起,原来的问题中的一些不正确的信息。 Pumba在服务容器而不是应用程序容器上工作。 tc命令在任何容器中都不起作用。

事实certificate,这是一个作为非特权用户运行的问题。 我用pumba解决了这个问题。

当以root身份运行时,tc命令仍然不起作用,我仍然不知道为什么。 但是,我只是使用该命令进行debugging,所以虽然我很好奇为什么它不起作用,我的主要问题已经解决。