我对docker是否会继承主机的内核参数感到困惑,我做了如下测试: 内核版本:
$ uname -r
3.10.0-957.el7.x86_64
ip_local_port_range
参数,命令是:$ sudo docker run --rm busybox cat /proc/sys/net/ipv4/ip_local_port_range
输出:
128
这很合理,因为ip_local_port_range
是一个命名空间参数,我想它是从主机继承的。
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”文件,因此容器会从主机继承其值。任何帮助将不胜感激。
答案 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];
没那么多。其他系统是全局变量,不考虑调用者的网络名称空间是什么。这包括您感兴趣的系统:
tcp_fin_timeout
-definition,use; tcp_tw_reuse
-definition,use。请注意,内核3.10的最新RHEL / CentOS版本(您似乎正在使用)具有更多的sysctls命名空间-例如您提到的ip_local_port_range
,但这仍然不包括tcp_fin_timeout
和tcp_tw_reuse
。
因此,最后回答您的问题:在内核3.10中,这些参数是系统范围的,并且容器化进程使用这些sysctls的值与主机系统相同。