1

我正在尝试在 docker 中模拟部分/全部网络/容器故障,以查看我的应用程序在故障条件下的行为。我已经开始使用 pumba,但它不能正常工作。更具体地说,此命令在运行时失败,无论是通过 pumba 还是使用 docker exec 直接在容器上运行时:

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

具有以下输出:

RTNETLINK answers: Operation not permitted

现在这是它变得陌生的地方。它在我的服务容器中运行时有效实际上,它仅在通过 pumba 运行时有效,而不是在安装 iproute2 包后直接运行(rabbitmq:3.6.10,redis:4.0.1,mongo:3.5.11)时有效。它在我的应用程序容器中不起作用,所有这些容器都使用 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
4

3 回答 3

0

好的,我找到了部分答案。事实证明,直接在服务容器上运行时,tc 命令不起作用。对于原始问题中的一些不正确信息,我们深表歉意。Pumba 在服务容器上工作,而不是在应用程序容器上工作。tc 命令在任何容器中都不起作用。

事实证明,作为非特权用户运行是一个问题。我用 pumba 提出了一个问题来解决这个问题。

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

于 2017-09-13T18:15:33.170 回答
0

您应该使用 root 用户在容器上调用 exec:-u=0

喜欢:

sudo docker exec-u=0 myContainer tc qdisc add dev eth0 root netem delay 2000ms 10ms 20.00
于 2020-08-28T17:02:55.927 回答
0

我在 Windows 上遇到了类似的问题,最后能够通过在 Docker 设置中关闭基于 WSL 2 的引擎来解决。现在我所有的tc qdisc...命令都在工作。

于 2021-07-09T20:20:46.907 回答