我正在尝试在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
,我不知道如何应用该补丁。
有谁知道如何解决这个问题?
答案 0 :(得分:1)
Docker容器在自己的network namespace中运行。在命名空间内,您无权访问所有TCP系统参数; Docker bugtracker中有一个similar issue,其中声明“[t] hose不会丢失容器中的文件。这与安全性和内核版本有关。”所以就是这样,不幸的是,没有办法解决这个问题。
我能想到的一个解决方案是在启动时使用--net=host
标志在主机的网络命名空间内启动容器。但是,如果您明确的目标是测量Docker网络堆栈的网络吞吐量,那么这可能不是您的选择。
或者,您可以按照this tutorial关于如何将自定义补丁应用于Debian软件包来自行修补nuttcp。这基本归结为以下几点:
apt-get source <package>
apt-get build-dep <package>
dpatch
debuild -b -uc -us
dpkg -i <package>.deb