docker是否会继承主机内核参数,例如tcp_tw_reuse / tcp_fin_timeout?

时间:2019-07-18 12:17:13

标签: docker linux-kernel

我对docker是否会继承主机的内核参数感到困惑,我做了如下测试: 内核版本:

$ uname -r
3.10.0-957.el7.x86_64
  1. 我想回显ip_local_port_range参数,命令是:
$ sudo docker run --rm busybox cat /proc/sys/net/ipv4/ip_local_port_range

输出:

128

这很合理,因为ip_local_port_range是一个命名空间参数,我想它是从主机继承的。

  1. 测试tcp_tw_reuse参数:
sudo docker run --rm busybox cat /proc/sys/net/ipv4/tcp_tw_reuse

输出:

cat: can't open '/proc/sys/net/ipv4/tcp_tw_reuse': No such file or directory

据我所知,在内核3.10中,tcp_tw_reuse没有命名空间,并且docker没有该文件,这也是合理的。 现在,我想知道的是,由于容器中不存在“ / proc / sys / net / ipv4 / tcp_tw_reuse”文件,因此容器会从主机继承其值。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

香草3.10内核于2013年发布。tcp_fin_timeout的命名空间发生于much later,在2016年初,tcp_tw_reuse的命名空间发生了even later

事实上,these是在Vanilla 3.10中命名的网络系统:

int sysctl_icmp_echo_ignore_all;
int sysctl_icmp_echo_ignore_broadcasts;
int sysctl_icmp_ignore_bogus_error_responses;
int sysctl_icmp_ratelimit;
int sysctl_icmp_ratemask;
int sysctl_icmp_errors_use_inbound_ifaddr;

int sysctl_tcp_ecn;

kgid_t sysctl_ping_group_range[2];
long sysctl_tcp_mem[3];

没那么多。其他系统是全局变量,不考虑调用者的网络名称空间是什么。这包括您感兴趣的系统:

请注意,内核3.10的最新RHEL / CentOS版本(您似乎正在使用)具有更多的sysctls命名空间-例如您提到的ip_local_port_range,但这仍然不包括tcp_fin_timeouttcp_tw_reuse

因此,最后回答您的问题:在内核3.10中,这些参数是系统范围的,并且容器化进程使用这些sysctls的值与主机系统相同。