记录一次修改网卡配置,导致的docker内服务无法访问

机器上的docker内部署的服务无法访问,起初以为是防火墙,一查并没有开,然后也顾不上找问题了,先处理吧,就试着把docker服务重启下,然后就没有然后了,一切正常了,找找原因吧。

从资料查询得知,Docker与宿主机的端口映射是通过iptables实现的,容器启动时会在iptables中添加DOCKER链和nDNAT规则

简单来了解一下,查看一下nat表的DOCKER

1 $ sudo iptables -t nat -nvL DOCKER

 

 

从图中可以看到有多条DNAT规则,规则将宿主机9000端口的报文转发到172.17.0.2的9000端口上,而172.17.0.2是分配给docker监控服务容器的ip(可以通过docker inspect 容器ID命令查看)

而这个DNAT规则需要宿主机开启内核IP转发功能,所以IP转发未开启会导致服务访问失败。

问题的根源找到了,但是产生的原因还没找到。

为什么之前没有手动开启IP转发时DOCKER服务依然能正常运行?

这是因为Docker daemon启动时会检查IP_FORWARD是否开启,如果未开启则临时开启,因为是临时开启所以在network服务重启后就会失效。服务器断电重启后network服务自然会重启,就有可能导致IP_FORWARD失效。一般docker服务正常运行一段时间后却突然访问不了,大不多是因此引起的,可以从这里开始排查。

想起前一日xxl定时任务在执行批量给企业微信推送消息时,发现企业微信的域名无法正常解析,然后就一顿度娘和谷哥,最终方案就是把服务器的DNS地址从114换成了谷哥的8,然后重启网卡后一切正常。其中这重启网卡,是不是这个操作导致的!

自己又重启的试了试,果然不能访问了,查看IP转发是否开启

 sysctl net.ipv4.ip_forward

 

 结果是0,未开启,开启应该是1.

行吧,那就先启动一下:

1 echo 'net.ipv4.ip_forward = 1' | sudo tee -a /usr/lib/sysctl.d/50-default.conf

重启network服务

1 systemctl restart network

服务正常,查看IP转发是否开启

 

已开启,自此服务一切恢复正常,这也是我使用docker这5来年头一次遇见,记录一下。

posted @ 2022-10-10 14:14  xingbo  阅读(794)  评论(0编辑  收藏  举报