集群中Node-3节点Docker容器curl主节点连接拒绝问题求助
解决Node-3容器无法curl主节点的问题(Connection refused)
嘿,结合你描述的情况——主节点+3个计算节点,Node-1、2的容器能正常curl主节点,Node-3的容器能ping通但TCP连接被拒绝,而且宿主机本身访问完全正常,试过关docker0和setsebool都没用——咱们先把核心矛盾理清楚:ping通说明基础网络连通、DNS都没问题,Connection refused肯定是TCP层的访问被拦住了,而且问题出在Node-3的Docker网络配置或者主节点对Node-3容器网段的限制上。
下面是一步步的排查和解决思路:
一、先确认主节点端口对Node-3容器网段是否开放
既然ping能通,先别着急查Docker,先确认主节点的目标端口(比如curl默认的80,要是你用了其他端口记得指定)是不是真的接纳Node-3容器的流量:
- 在Node-3的容器里跑
telnet <主节点IP> <目标端口>或者nc -zv <主节点IP> <目标端口>,直接测试TCP端口可达性——如果这里显示连接拒绝,那问题大概率在主节点的防火墙 - 登录主节点,查看防火墙规则:用
iptables -L -n(iptables环境)或者firewall-cmd --list-all(firewalld环境),重点看有没有规则拒绝了Node-3容器所在的网段(Docker默认容器网段一般是172.17.0.0/16,但不同节点的docker0可能网段不一样,比如Node-3的docker0是172.18.0.0/16,主节点防火墙没放通这个网段的TCP流量)
二、排查Node-3的Docker网络配置和其他节点的差异
你说Node-1、2关docker0能解决类似问题,但Node-3没用,说明Node-3的Docker网络配置肯定和另外两个节点不一样:
- 查看容器的网络模式:
docker inspect <你的容器ID> | grep NetworkMode,对比Node-1、2的容器,是不是Node-3用了特殊的网络模式(比如自定义网桥而不是默认的docker0)? - 查看Node-3的docker0网卡信息:
ip addr show docker0,把网段和Node-1、2的对比,确认是不是主节点防火墙没放行这个网段 - 查看Node-3的Docker iptables规则:
iptables -t nat -L DOCKER,有没有异常的转发规则或者拦截规则,导致容器的出站请求被挡了
三、检查容器内部的小概率问题
虽然可能性不高,但也可以快速排查下容器内部:
- 进入容器:
docker exec -it <容器ID> /bin/bash,检查下容器内有没有本地防火墙(比如iptables)拦截了出站流量,或者是不是设置了代理(可以试试curl -x "" <主节点IP>排除代理干扰)
四、几个快速试错的解决方案
如果上面的排查没找到问题,试试这几个操作:
- 重启Node-3的Docker服务:
systemctl restart docker,有时候Docker的iptables规则会乱掉,重启后会自动重建规则 - 给Node-3的容器换host网络模式启动:
docker run --network host ...,如果这样能正常curl,那就是Docker桥接网络的配置出问题了,你可以尝试重置docker0网桥:ip link set docker0 down; brctl delbr docker0; systemctl restart docker - 检查Node-3容器的路由表:在容器里跑
route -n,确认到主节点的路由是不是走了docker0网关,有没有异常的路由条目
内容的提问来源于stack exchange,提问作者Tims
相关产品推荐
相关产品推荐

