无法在Docker中运行nuttcp
我试图在Docker容器内运行nuttcp
来测量它的UDP吞吐量。 但是,每当我启动客户端实例时,服务器实例崩溃,并出现以下错误消息: Segmentation fault (core dumped)
。
我发现这个 Debian的bug报告 ,说nuttcp
崩溃,因为/proc/sys/net/ipv4/tcp_adv_win_scale
不存在。 我检查了nettcp
工作的另一台机器上的文件,看到该文件的唯一内容是1
。 所以我试图添加这个文件在我的Docker容器中,像这样:
root@7d4c0f0ffe4f:/proc/sys/net/ipv4$ echo 1 > tcp_adv_win_scale bash: tcp_adv_win_scale: No such file or directory
所以猜猜这是不可能手动创build这个文件。 错误报告还包括一个补丁,可以应用到源代码( nuttcp-6.1.2.c
),但由于我安装nuttcp
与apt-get
我不知道如何应用该补丁。
有没有人有一个想法如何解决这个问题?
Docker容器在自己的networking命名空间中运行。 在命名空间内,您无权访问所有TCP系统参数; 在Docker bugtracker中也存在类似的问题 ,其中声明: “软件包不会丢失容器中的文件,这与安全性和内核版本有关。 所以那是不可能的,不幸的是。
我能想到的一个解决scheme是在主机的networking名称空间内启动容器,在启动时使用--net=host
标志。 但是,如果您的明确目标是衡量Dockernetworking堆栈的networking吞吐量,那么这可能不是您的select。
或者,您可以按照本教程中关于如何将自定义修补程序应用于Debian软件包来修补nuttcp。 这基本上归结为以下几点:
- 用
apt-get source <package>
安装源码包 - 使用
apt-get build-dep <package>
安装构build依赖关系 - 使用
dpatch
将补丁应用于源代码 - 使用
debuild -b -uc -us
构build修改的程序包 - 并使用
dpkg -i <package>.deb
安装修改的软件包