在没有特权模式的Docker环境中操纵Docker中容器之间的网络流量?

2024-05-29 11:17:45 发布

您现在位置:Python中文网/ 问答频道 /正文

在docker容器在其他docker容器中运行的环境中(通过安装docker套接字,而不是以特权身份运行),是否有任何方法可以操纵网络来执行以下操作:

  • 引入延迟
  • 丢弃%的数据包
  • 带宽上限

我只对来自容器的docker-to-docker流量感兴趣我从docker py(环境内部)开始。我不关心操纵其他流量,如docker到本地主机或docker到internet。在许多方面,只操纵docker docker网络流量是理想的。在

当docker容器在下列情况之一下运行时,即使在docker容器中,也有很多方法可以做到这一点:

  • 模式特权
  • 传递--cap-add=NET_ADMIN标志运行时

一些实用程序(iptables、tc和使用它们实现的各种库)允许这样做。但是所有这些都需要比我的环境中可用的更高的权限,因为“主机”容器不是以特权模式启动的。在

我无法控制系统配置。我已经在另一个容器中运行这些容器,而不是在特权模式下启动。如果我可以改变它,因为我可以使用上面列出的任何工具。在

所有容器都连接到由docker network create foobar创建的网络。在

我用Python3.4编写的应用程序使用的是OSX上的dockerpy。在

  • 有没有办法操纵网络,使docker-to-docker网络特性引入延迟、丢包等?在

Tags: to方法dockerpy网络环境模式身份
1条回答
网友
1楼 · 发布于 2024-05-29 11:17:45

我知道现在已经很晚了,但是我发现了为什么我要寻找我自己问题的答案。。。(不过,它确实需要特权,但认为它可能还是有用的)

可以使用tc命令在容器之间引入延迟。为 例如,如果ping时间为5ms,则通过运行以下命令:

tc qdisc add dev eth0 root netem delay 1000ms

现在ping大约为1005ms

要删除延迟,请运行以下命令:

^{pr2}$

可以使用iptables命令模拟网络的完全故障,因此以下命令将阻止所有到IP地址192.168.1.202的流量:

iptables -A INPUT -s 192.168.1.202/255.255.255.255 -j DROP

要再次解除阻止,请使用:

iptables -D INPUT -s 192.168.1.202/255.255.255.255 -j DROP

相关问题 更多 >

    热门问题