如何为Docker容器设置udp缓冲区大小?

时间:2019-02-18 14:29:41

标签: docker linux-kernel

我想为Docker容器设置UDP缓冲区大小。尽管UDP缓冲区大小是与内核相关的设置,并且它与主机的大小相对应,但我发现,我看不到缓冲区大小的主机设置会影响我的容器。

这是我尝试过的:

在主机上

sysctl -w net.core.rmem_default = 4194304
sysctl -w net.core.rmem_max = 4194304

并进行验证(在主机上

sysctl net.core.rmem_default
net.core.rmem_default = 4194304

sysctl net.core.rmem_max
net.core.rmem_max = 4194304

但是,当我在容器中奔跑时(比如说高山)。

docker run -it alpine

和用高山灰烬

sysctl net.core.rmem_default
sysctl: error: 'net.core.rmem_default' is an unknown key

rmem_max也是如此。

但是,令我惊讶的是,

sysctl net.core.rmem_default
net.core.somaxconn = 128

我可以使用--sysctl参数在docker容器上设置以上内容。

docker run -it --sysctl net.core.somaxconn=125 alpine
/ # sysctl net.core.somaxconn
net.core.somaxconn = 125

但是,我需要的是rmem_defaultrmem_max的大小。

如果未通过--sysctl标志提供此选项,并且该设置取决于主机,则

如何证明容器上的缓冲区大小与主机上的大小相同?

此外,在许多测试中,我知道数据包被丢弃(我认为是因为设置了较小的缓冲区大小)。

我还尝试写入容器中的/proc/sys/net/core/rmem_default,但出现无法统计错误。我不明白为什么在docker rmem_default的主机上找不到rmem_max等文件(/proc等)。

我听说主机/proc已安装在容器上。是真的吗似乎没有考虑上述情况。

此外,编辑sysctl.conf并调用sysctl -p也无济于事。

如果可以的话,请随时将这个问题移到unix.stackexchange.com。

0 个答案:

没有答案