我想为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_default
和rmem_max
的大小。
如果未通过--sysctl
标志提供此选项,并且该设置取决于主机,则
如何证明容器上的缓冲区大小与主机上的大小相同?
此外,在许多测试中,我知道数据包被丢弃(我认为是因为设置了较小的缓冲区大小)。
我还尝试写入容器中的/proc/sys/net/core/rmem_default
,但出现无法统计错误。我不明白为什么在docker rmem_default
的主机上找不到rmem_max
等文件(/proc
等)。
我听说主机/proc
已安装在容器上。是真的吗似乎没有考虑上述情况。
此外,编辑sysctl.conf
并调用sysctl -p
也无济于事。
如果可以的话,请随时将这个问题移到unix.stackexchange.com。