最近没事在折腾Docker,其中一个项目需要在容器内部获取 iptables 日志,然后使用额外的程序进行分析,结果折腾半天容器内部始终拿不到日志文件(一般没意外的话会在/var/log/messages
)
于是去外网转了一圈回来终于发现了问题所在,在13年内核的一次更新中提到:Disabled from containers until syslog ns is supported
幸运的是,自内核版本kernel 4.11之后,这个更新为了一个可选项,默认关闭。
所以解决办法就是在宿主机执行:
echo "net.netfilter.nf_log_all_netns = 1">> /etc/sysctl.conf
sysctl -p
注意:Linux内核官方之所以改为默认关闭是基于安全策略的考量,防止log被滥用,所以你如果强制开启,一定要多注意。