检查分析
1.是否能访问当运行docker容器虚拟机(主机)地址
通过Xshell工具连接到宿主机和外部telnet宿主机ssh端口均正常
2.查看docker容器的实例状态以及映射端口是否正常
docker ps -a
容器实例和端口映射都正常
那么我们继续排查
3. 虚拟机对应的端口号是否开启或者防墙是否关闭
以我的虚拟机为例,我的镜像版本是CentOS-7,防火墙是firewalld管理。
输入systemctl status firewalld 查看防火墙状态
如果是run的状态 执行命令
执行 firewall-cmd --zone=public --list-ports
查看public下所有开放的端口是否有该实例映射端口,没有就添加
我登录虚拟机查看后我的防火墙状态是loaded的状态,所以不是防火墙端口原因
selinux 也是disabled
4.查看一下容器实例的配置文件是不是正常
因为我是bind的是宿主机的配置文件也就是通过挂在卷方式,-v /宿主机redis.conf:/容器实例redis.conf
执行 docker inspect <container_id_or_name>
查看bind的配置也没问题呀
无F可说,明明宿主机上的其他中间件都可以访问的呀,这是docker的是啥毛病,chatgpt走起??
工作时间,还是不要这么高调了,会显得“智多星”
网上搜索翻页还可以努力一下,
111001011001100010111111111001011001100010111111111001011001100010111111
。
终于找到一篇解决了问题
5.转发出问题了,Linux转发是要开启内核转发功能
按照文章步骤,查询了一下,果然,内核转发没开启
执行
iptables -t nat -L
查看iptables转发是否正常
查看均正常,往下走
检查内核转发是否打开
sysctl net.ipv4.ip_forward
发现内核转发是处于关闭状态的(0代表内核转发没有打开)
echo命令开启内核转发
通过客户端去连接
正常访问了。
但是具体此种情况为啥发生,仍需要排查,明明正常使用,突然出现问题,挺cd。
大家可以去看原文 Itqm 滑动验证页面https://segmentfault.com/a/1190000044235072