无法在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 ),但由于我安装nuttcpapt-get我不知道如何应用该补丁。

有没有人有一个想法如何解决这个问题?

Docker容器在自己的networking命名空间中运行。 在命名空间内,您无权访问所有TCP系统参数; 在Docker bugtracker中也存在类似的问题 ,其中声明: “软件包不会丢失容器中的文件,这与安全性和内核版本有关。 所以那是不可能的,不幸的是。

我能想到的一个解决scheme是在主机的networking名称空间内启动容器,在启动时使用--net=host标志。 但是,如果您的明确目标是衡量Dockernetworking堆栈的networking吞吐量,那么这可能不是您的select。

或者,您可以按照本教程中关于如何将自定义修补程序应用于Debian软件包来修补nuttcp。 这基本上归结为以下几点:

  1. apt-get source <package>安装源码包
  2. 使用apt-get build-dep <package>安装构build依赖关系
  3. 使用dpatch将补丁应用于源代码
  4. 使用debuild -b -uc -us构build修改的程序包
  5. 并使用dpkg -i <package>.deb安装修改的软件包