ubuntu - 无法在 Docker 中运行 nuttcp

标签 ubuntu networking docker patch

我正在尝试运行 nuttcp在 Docker 容器中测量其 UDP 吞吐量。但是,每当我启动客户端实例时,服务器实例就会崩溃并显示以下错误消息:Segmentation fault (core dumped) .

我找到了this bug report对于 Debian,它说 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

所以猜测不可能手动创建这个文件。错误报告还包括一个可应用于源代码的补丁(nuttcp-6.1.2.c),但由于我安装了 nuttcpapt-get我不知道如何应用该补丁。

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

最佳答案

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

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

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

  • 使用 apt-get source <package> 安装源包
  • 使用 apt-get build-dep <package> 安装构建依赖项
  • 使用 dpatch 将补丁应用于源代码
  • 使用 debuild -b -uc -us 构建修改后的包
  • 并使用 dpkg -i <package>.deb 安装修改后的包
  • 关于ubuntu - 无法在 Docker 中运行 nuttcp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36681628/

    相关文章:

    Ubuntu 16.04 systemd redis 与 ulimit 的问题

    ubuntu - 不小心从修补板闪存中删除了 u-boot

    wcf - 有谁知道使用 WCF 为非 .NET 客户端公开 SOAP 接口(interface)的任何问题?

    docker - 获取 docker 服务更新中警告的全文

    java - 附加到进程 : sun. jvm.hotspot.debugger.DebuggerException 时出错:无法打开二进制文件

    apache - vagrant provisining 在 Windows 上不起作用,但在 Ubuntu 上起作用

    linux - Windows "C:/Users/<username>/"目录在 `docker build` 命令期间不可见

    windows - 在 Windows 上的 Docker 容器中运行 Kafka-Manager

    linux - 在 Linux 中检测网络连接类型

    c++ - QT QTcpServer 没有及时连接