无法在Docker中运行nuttcp

时间:2016-04-17 20:08:02

标签: ubuntu networking docker patch

我正在尝试在Docker容器中运行allow_world_readable_tmpfiles来测量它的UDP吞吐量。但是,每当我启动客户端实例时,服务器实例都会崩溃,并显示以下错误消息:nuttcp

我找到了Debian的this bug report,其中Segmentation fault (core dumped)崩溃,因为文件nuttcp不存在。我在/proc/sys/net/ipv4/tcp_adv_win_scale工作的另一台计算机上检查了该文件,发现该文件的唯一内容是nettcp。所以我试着在我的Docker容器中添加这个文件,如下所示:

1

因此猜测无法手动创建此文件。错误报告还包括一个可以应用于源代码(root@7d4c0f0ffe4f:/proc/sys/net/ipv4$ echo 1 > tcp_adv_win_scale bash: tcp_adv_win_scale: No such file or directory )的补丁,但由于我使用nuttcp-6.1.2.c安装了nuttcp,我不知道如何应用该补丁。

有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

Docker容器在自己的network namespace中运行。在命名空间内,您无权访问所有TCP系统参数; Docker bugtracker中有一个similar issue,其中声明“[t] hose不会丢失容器中的文件。这与安全性和内核版本有关。”所以就是这样,不幸的是,没有办法解决这个问题。

我能想到的一个解决方案是在启动时使用--net=host标志在主机的网络命名空间内启动容器。但是,如果您明确的目标是测量Docker网络堆栈的网络吞吐量,那么这可能不是您的选择。

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

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